【问题标题】:Attribute propagation rule for repeat (%)重复的属性传播规则 (%)
【发布时间】:2015-12-08 11:18:33
【问题描述】:

我检查了这个网页 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'

那么,这样做的正确方法是什么?

【问题讨论】:

    标签: c++ boost attributes boost-spirit


    【解决方案1】:

    读取a: A, b: B --&gt; (a % b): vector&lt;A&gt;的方式是:“如果解析器a暴露了一个属性A,解析器b暴露了一个属性B,那么a%b暴露了属性vector&lt;A&gt;”,意思是B 的属性在列表解析器中总是被忽略。您的宏调用的问题是the commas that separate the template parameters

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2016-12-18
    • 2014-10-21
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多