我有一个自定义终端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