我希望能夠通過類型的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。編輯 –