Boost Spirit での rule では二つ目のテンプレート変数の括弧を忘れないように2021年04月04日 11時03分11秒

Boost Spirit は既に X3 に置き換えられてはいるが、構文によっては移行は簡単でもない。

qi::rule では、第一引数に iterator、第二引数に読み込む型、第三引数に skipper 等と渡していく。

qi::rule< Iterator, std::string(), Skipper > name_;
この二つ目の引数は、初期化の式らしく、ここで括弧を忘れると延々と続く、分かりづらいエラーになるのに最近になって気が付いた。

加えて、第二引き数がプリミティブ型だと、括弧を忘れてもコンパイルには影響が無いようで、一行足した後に不可解なエラーを見るようになって、前後に括弧無しの行があったりすると深みにはまる。

クラス型でも括弧を忘れてもコンパイル出来ているケースが手元であった。実はこの場合の違いは把握仕切れていない。ただ、括弧を付けていてエラーになることはないので、余計なエラーを避ける習慣として気を付けている。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/04/04/9363800/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。