我已经检查过该网页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/

10-12 17:03
查看更多