カスタム端末がboost::spirit
あり、ユーザーが端末の最初のパラメーターを遅延パラメーターとして提供し、残りを通常のリテラル文字列として提供できるようにしたいと考えています。これはuse_lazy_terminal
、たとえば、私の専門分野で次を使用する場合に使用できますか?
template<>
struct use_lazy_terminal<qi::domain, my_custom_tag, 1 /*only first parameter*/>
: mpl::true_ {};
@seheあなたの答えに感謝します、この質問での私の懸念はパフォーマンスではなく、コンパイラが最適化することを知っています...。カスタム端末を作成する理由を説明しましょう。
ご存知のように、qi
文法のコンパイルは非常に遅く、エラーの原因を見つけるのは非常に困難です(qi
それ自体の単純な使用と比較して)。そこで、これを取得するカスタム端末を作成することにしましたdebug_position( debug_callback, rule_name, msg )
。したがって、ルールからカスタムデバッガーにカスタムメッセージを送信できます。これは非常に単純ですが、セマンティックアクションを使用してこれを行うことができますが、この手法を使用して、リリースモードで何も展開されないマクロと組み合わせることができます。文法を書いて、必要なものをデバッグするだけです。しかし、私のメッセージとルール名は一定なので、それらを関数などから提供された最初の引数に格納するconst char*
ことstd::string
は可能だと思いますが、残りはリテラルにする必要がありますか?const char (&) [N]
私は私の専門分野で使用することができますuse_terminal
ユーザーに文字列リテラルの使用を強制します。
ご覧のとおり、私はこれがなくても生きることができますが、本当に知りたいのですが、これを精神的に行うことはできますか?
私のソースコードは次の場所にあります:http://pastebin.com/275S6Czu