【发布时间】:2012-12-31 18:49:14
【问题描述】:
我正在处理 C++ 中的联合,我想要一个函数模板,它可以根据模板参数访问活动的联合成员。
代码类似于(doSomething 只是一个示例):
union Union {
int16_t i16;
int32_t i32;
};
enum class ActiveMember {
I16
, I32
}
template <ActiveMember M>
void doSomething(Union a, const Union b) {
selectMemeber(a, M) = selectMember(b, M);
// this would be exactly (not equivalent) the same
// that a.X = b.X depending on T.
}
为了做到这一点,我只发现了一些不好的技巧,比如专业化,或者访问和分配的方式不统一。
我遗漏了一些东西,应该用其他方法来做这些事情吗?
【问题讨论】:
-
为什么你认为专业化是“坏黑客”? C++ 中还没有“静态 if”之类的东西,所以除了定义单独的模板之外,我没有看到任何其他方法。不过我可能是错的
-
我猜你的意思是
selectMemeber(a, M) = selectMember(b, M);? -
@Philipp,是的,谢谢!已编辑。
-
我认为通过指向成员的指针可能会有一个很好的解决方案,但我还不确定这是否合法。见stackoverflow.com/questions/14375965/…
标签: c++ templates member unions