C++ 如何告知boost::karma::rule在未提供有效生成器的情况下不使用其属性?
假设我们有以下源代码:C++ 如何告知boost::karma::rule在未提供有效生成器的情况下不使用其属性?,c++,c++11,boost,boost-spirit,boost-spirit-karma,C++,C++11,Boost,Boost Spirit,Boost Spirit Karma,假设我们有以下源代码: #include <iostream> #include <string> #include <iterator> #include <boost/spirit/include/karma.hpp> namespace karma = boost::spirit::karma; template <typename OutputIterator> struct grammar : karma::grammar
#include <iostream>
#include <string>
#include <iterator>
#include <boost/spirit/include/karma.hpp>
namespace karma = boost::spirit::karma;
template <typename OutputIterator> struct grammar : karma::grammar<OutputIterator, std::nullptr_t()> {
grammar() : grammar::base_type(query) {
query = "yeah";
}
karma::rule<OutputIterator, std::nullptr_t()> query;
};
int main(void) {
typedef std::back_insert_iterator<std::string> iterator_type;
std::string generated;
iterator_type output_it(generated);
//keys_and_values<sink_type> g;
grammar<iterator_type> g;
bool result = karma::generate(output_it, g, nullptr);
std::cout << result << ":" << generated << std::endl;
return 0;
}
#包括
#包括
#包括
#包括
名称空间业力=提升::精神::业力;
模板结构语法:karma::grammar{
语法():语法::基本类型(查询){
query=“是”;
}
业力:规则查询;
};
内部主(空){
typedef std::back\u insert\u迭代器迭代器\u type;
std::生成的字符串;
迭代器类型输出(生成);
//键_和_值g;
语法g;
bool result=karma::generate(output_it,g,nullptr);
std::cout可能的答案:在发布这篇文章之后,我找到了一个暂时让我满意的解决方案。那就是:引入一个中间规则
template <typename OutputIterator> struct grammar : karma::grammar<OutputIterator, std::nullptr_t()> {
grammar() : grammar::base_type(query) {
query = null_rule;
null_rule = "null";
}
karma::rule<OutputIterator, std::nullptr_t()> query;
karma::rule<OutputIterator, karma::unused_type()> null_rule;
};
模板结构语法:karma::语法{
语法():语法::基本类型(查询){
query=null\u规则;
null_rule=“null”;
}
业力:规则查询;
因果报应:规则无效\u规则;
};
我仍然对任何评论、指责或其他解决方案感兴趣。可能的答案:在发布这篇文章之后,我找到了一个暂时让我满意的解决方案。那就是:引入一个中间规则
template <typename OutputIterator> struct grammar : karma::grammar<OutputIterator, std::nullptr_t()> {
grammar() : grammar::base_type(query) {
query = null_rule;
null_rule = "null";
}
karma::rule<OutputIterator, std::nullptr_t()> query;
karma::rule<OutputIterator, karma::unused_type()> null_rule;
};
模板结构语法:karma::语法{
语法():语法::基本类型(查询){
query=null\u规则;
null_rule=“null”;
}
业力:规则查询;
因果报应:规则无效\u规则;
};
我仍然对任何评论、指责或其他解决方案感兴趣。你似乎无意中发现了臭名昭著的单元素融合序列难题的反面(
我注意到,因为错误源于试图验证输入字符串是否与属性(lit.hpp)匹配的代码:
瞧,它起作用了:
[1]请参见
等等。这是一个悲哀的缺陷,可能需要为SpiritV2解决。您似乎偶然发现了臭名昭著的单元素融合序列难题的反面(
我注意到,因为错误源于试图验证输入字符串是否与属性(lit.hpp)匹配的代码:
瞧,它起作用了:
[1]请参见
等等。这是一个悲哀的缺陷,可能需要为SpiritV2解决。我刚刚发现了一个确认Spirit X3将解决此问题的方法。有关包含容器的改编序列的相关讨论:(也将问题放在邮件列表上,只是为了检查karma::lit
)中是否存在缺陷是的,效果很好!谢谢你的参考资料。我很高兴发现我正确理解了文档:)我刚刚发现了一个证据,证实Spirit X3将解决这个问题。关于包含容器的改编序列的相关讨论:(也把问题放在邮件列表上,只是为了检查karma::lit
中是否有bug)是的,效果很好!谢谢你的参考。我很高兴发现我正确理解了文档:)
query = karma::eps << "yeah";