这就是我想要达到的,
- 我想将结构作为参数传递给函数,该函数将返回字符指针
- 每次我都会传递不同的结构作为参数,它具有不同的名称和不同类型的成员变量
- 该函数必须识别结构及其成员变量,获取成员变量的值并将其连接为单个字符串并返回。
请建议....
我对模板函数和 RTTI 感到困惑.....
您可以查看Boost.Fusion,特别是BOOST_FUSION_ADAPT_STRUCT。
The first suggestion that crosses my mind is: redesign!
If you really want to do it like you say and don't know the names of the fields, I don't think a template will do you any good. I'd suggest using the preprocessor:
#define UGLY(str, int_field, char_field) whatever_you_want_to_do_with_them
and then you'd call:
a some_a;
b some_b;
UGLY(some_a, x, y);
UGLY(some_b, b, a);
为什么不将结构(具有相同的成员类型,但名称不同)表示为元组?恕我直言,如果您想以相同的方式处理这组结构,使用不同的名称会适得其反:
template<typename...Ts>
void f(const std::tuple<Ts...>& tuple)
{
...
}
没有特别好的方法来迭代类成员。我使用的一种方法是将值存储在元组中,并在需要时提供命名访问器:
struct a {
std::tuple<int, char*> stuff;
int & x() {return std::get<0>(stuff);}
char & y() {return std::get<1>(stuff);}
};
在未来(也许是明年?)我们应该得到函数返回类型的类型推导(就像我们已经对 lambdas 所做的那样),这将删除每个访问器中容易出错的类型说明符。
然后,您可以使用可变参数模板函数来迭代元组。