迭代BOOST_FUSION_ADAPT_ADT结构中的元素?

时间:2014-01-14 03:39:30

标签: c++ iterator boost-fusion

是否有任何融合:: for_each()迭代BOOST_FUSION_ADAPT_ADT或BOOST_FUSION_ADAPT_ASSOC_ADT中的a1和a2,就像使用BOOST_FUSION_ADAPT_STRUCT进行调整一样?

class A
{
private:
    int a1_;
    double a2_;

public:
    void set_a1(int v) { a1_ = v; }
    int get_a1() const { return a1_; }

    void set_a2(double v) { a2_ = v; }
    double get_a2() const { return a2_; }
};

BOOST_FUSION_ADAPT_ASSOC_ADT(
    A,
    (int, int, obj.get_a1(), obj.set_a1(val) )
    (double, double, obj.get_a2(), obj.set_a2(val) )
)

struct Print 
{
    template <typename T>
    void operator()( T& t ) const
    {
        // T is of type adt_attribute_proxy
        // cout << ??
        // would like to print a1 and a2 value
    }
};

int main()
{
    A a;
    boost::fusion::for_each( a, Print() );
}

1 个答案:

答案 0 :(得分:2)

adt_attribute_proxy提供方法get来访问属性值。

struct Print
{

    template <typename T>
    void operator()(T& t) const
    {
        std::cout << t.get();
    }
};

P.S。您在BOOST_FUSION_ADAPT_ASSOC_ADT宏示例中存在错误。每个元素应该用5个参数声明(attribute_typeNattribute_const_typeNget_exprNset_exprNkey_typeN)也许你混淆了BOOST_FUSION_ADAPT_ASSOC_ADT和BOOST_FUSION_ADAPT_ADT?