这就是我想要实现的目标,
请建议......
与模板功能和RTTI相混淆.....
答案 0 :(得分:3)
您可以查看Boost.Fusion,特别是BOOST_FUSION_ADAPT_STRUCT。
答案 1 :(得分:1)
我想到的第一个建议是:重新设计!
如果你真的想像你说的那样做,并且不知道字段的名称,我认为模板对你没有任何好处。我建议使用预处理器:
#define UGLY(str, int_field, char_field) whatever_you_want_to_do_with_them
然后你打电话:
a some_a;
b some_b;
UGLY(some_a, x, y);
UGLY(some_b, b, a);
答案 2 :(得分:0)
没有特别好的方法来迭代类成员。我使用的一种方法是将值存储在元组中,并在需要时提供命名访问器:
struct a {
std::tuple<int, char*> stuff;
int & x() {return std::get<0>(stuff);}
char & y() {return std::get<1>(stuff);}
};
在未来(明年,也许?)我们应该得到函数返回类型的类型推导(正如我们已经为lambdas所做的那样),这将删除每个访问器中容易出错的类型说明符。
然后,您可以使用可变参数模板函数来迭代元组。
答案 3 :(得分:0)
为什么你不代表你的结构(它们具有相同的memeber类型,但名称不同)作为元组?恕我直言,如果你想以同样的方式处理这组结构,有不同的名称会适得其反:
template<typename...Ts>
void f(const std::tuple<Ts...>& tuple)
{
...
}