我已经检查过该网页http://www.boost.org/doc/libs/1_44_0/libs/spirit/doc/html/spirit/qi/quick_reference/compound_attribute_rules.html以及其他许多网页,但是找不到我的问题的答案。
我有一个形式为C%= A%B的规则,其中B是解析器而不是文字,它的类型与A不同。上面网页上给出的规则说:
a: A, b: B --> (a % b): vector<A>
但是考虑到我的情况,B是解析器而不是A类型的,此规则似乎没有作用。
我已经尝试过了:
(a % b): variant<A, tuple<B,A>>
因此定义了以下结构:
struct equality_expression
{
variant<A,tuple<B,A>> equexp;
};
之后
BOOST_FUSION_ADAPT_STRUCT(
equality_expression,
(variant<A,tuple<B,A>>, equexp);
)
但是编译器抱怨:
warning C4002: too many actual parameters for macro 'BOOST_FUSION_ADAPT_STRUCT_FILLER_0'
那么,这样做的正确方法是什么?
最佳答案
读取a: A, b: B --> (a % b): vector<A>
的方法是:“如果解析器a
公开属性A
,而解析器b
公开属性B
,则a%b
公开属性vector<A>
”,这意味着B的属性在列表解析器中总是被忽略。您的宏调用出现的问题是the commas that separate the template parameters。
关于c++ - 重复的属性传播规则(%),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34154516/