【发布时间】:2016-02-09 19:08:15
【问题描述】:
我正在使用 boost fusion 库来遍历结构中的所有成员。 Identity 是 Namespace::SomeClass 的成员。通过一些递归操作,v 最终会成为一个Namespace::SomeClass 对象。进入if语句后,我希望能够处理SomeClass的成员对象。
template<typename T>
void Function(T const& v)
{
typedef boost::mpl::range_c<unsigned, 0, boost::fusion::result_of::size<T>::value > T_members;
boost::fusion::for_each(T_members(), FunctionStruct<T>(v));
if (std::is_same<T, Namespace::SomeClass>::value)
{
v.Identity= "0";
}
}
当我编译这段代码时,它给了我一个 C2039 错误提示
“身份”:不是“命名空间::OtherClass”的成员。
因为当 v 是 SubClass 时我只处理成员 identity,所以 Identity 不必是 OtherClass 的成员。我应该如何编写我的代码才能没有这个编译错误?
谢谢!
【问题讨论】:
标签: c++ templates boost compiler-errors typetraits