【发布时间】:2011-10-14 05:58:13
【问题描述】:
我正在开发一个具有基于消息/异步代理类架构的应用程序。 将有几十种不同的消息类型,每种都由 C++ 类型表示。
class message_a
{
long long identifier;
double some_value;
class something_else;
...//many more data members
}
是否可以编写允许在编译时计算类中数据成员数量的宏/元程序?
//例如:
class message_b
{
long long identifier;
char foobar;
}
bitset<message_b::count_members> thebits;
我不熟悉 C++ 元编程,但是 boost::mpl::vector 可以让我完成这种类型的计算吗?
【问题讨论】:
-
为什么不将
std::tuple<double, something_else> data;用作您的数据成员,而将std::tuple_size<message_a::data>::value用作计数? -
我想通过调用代码中的名称而不是位置来访问成员。
-
您总是可以将元组成员包装到访问器中,例如
double & some_value() { return std::get<0>(data); }等... -
感谢大家的建议,我还没有决定前进的道路。但会跟进您的建议。
-
read my answer here。另外,here's 指向我的仓库的链接。 pod_reflection 库(仅 stl,不涉及 boost)可用于获取 pod 数据类型中的最大类数并获取类型的元组
标签: c++ macros metaprogramming