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() );
}发布于 2014-01-14 05:26:52
adt_attribute_proxy提供方法get来访问属性值。
struct Print
{
template <typename T>
void operator()(T& t) const
{
std::cout << t.get();
}
};在示例BOOST_FUSION_ADAPT_ASSOC_ADT宏中存在错误。每个元素应该用5个参数来声明(attribute_typeN,attribute_const_typeN,get_exprN,set_exprN,key_typeN) --也许你把BOOST_FUSION_ADAPT_ASSOC_ADT和BOOST_FUSION_ADAPT_ADT混为一谈了?
https://stackoverflow.com/questions/21105693
复制相似问题