Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何告知boost::karma::rule在未提供有效生成器的情况下不使用其属性?_C++_C++11_Boost_Boost Spirit_Boost Spirit Karma - Fatal编程技术网

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";