【发布时间】:2015-07-29 22:57:39
【问题描述】:
在 C++03 中如何在编译时获取所选结构的成员数?我正在尝试使用 BOOST_FUSION_ADAPT_STRUCT,但没有得到任何可行的示例。
我想在编译时生成 switch 语句,每个成员都有一个 case。所以假设我们有 3 个成员的结构然后我想生成这个开关:
switch(val)
{
case 0:
break;
case 1:
break;
case 2:
break;
}
在每个语句中,我将调用带有一些参数的模板函数。其中一个参数是结构的成员。
我怎么能做这样的事情?
【问题讨论】:
-
使用容器,例如
std::vector、std::map之类的?或者进一步解释为什么那些不能达到你希望达到的效果...... -
容器与计算 struct 的成员有很大不同,如果 op 已经研究过像 fusion 这样的高级库,我认为我们应该让他怀疑他是否真的需要它。
-
@NirFriedman:真的吗?这将是我第一次看到“自省”或“反思”的请求,实际答案是“是的,这是编译器告诉你所需信息的一种方式”。
-
@Adrian:您可能还需要解释一下您在交换机内部的情况下要做什么......
-
@MatsPetersson 我明白你在说什么,但我确实认为,当有疑问时,你需要让人们从怀疑中受益。我在 cmets 的许多答案中都说过“你真的想要 X”,但是过了某个点,人们开始觉得如果不花大量时间证明他们的需求是合理的,就不可能在 SO 上提出问题。
标签: c++ boost-fusion boost-preprocessor