我希望能够通过类型的ID创建switch语句。我发现了一种机制,可以为不同类型提供唯一的ID。这很简单:类型的C++ constexpr值
template <typename T>
struct type {
static void id() { }
};
template <typename T>
constexpr const size_t type_id() {
return reinterpret_cast<size_t>(&type<T>::id);
}
我认为这将评估为一个常数,我可以用作开关的情况。但是,我得到一个错误的情况下表达,不是我做了以下的常数:
int main(void) {
size_t a = type_id<int>();
switch (a) {
case type_id<int>():
break;
}
return 0;
}
为什么它不是一个常数?我怎么能达到这个效果?
编辑:
我可以做这样的事情,而不reinterpret_cast的呢?
'reinterpret_cast' * *不能出现在'constexpr'函数中。就是这样。 – DeiDei
'ysize'是什么?发布[MCVE]。 –
@LightnessRacesinOrbit对不起,ysize是我自己定义的size_t。编辑 –