那麼,您可以創建一個類型列表,然後在編譯時提取該列表中的某個類型的索引。
從我的另一個答案,這裏是這種技術:
#include <type_traits>
template<typename... Types>
struct Seq {};
template<typename T, typename Seq, typename=void>
struct IndexOf;
template<typename T, typename First, typename... Types>
struct IndexOf<T, Seq<First, Types...>, typename std::enable_if< std::is_same<T, First>::value >::type > {
enum { value = 0 };
};
template<typename T, typename First, typename... Types>
struct IndexOf<T, Seq<First, Types...>, typename std::enable_if< !std::is_same<T, First>::value >::type > {
enum { value = 1+IndexOf<T,Seq<Types...>>::value };
};
typedef Seq< bool, char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long > IntegerTypes;
#include <iostream>
int main() {
std::cout << IndexOf< int, IntegerTypes >::value << "\n";
// this next line will not compile, because void is not in the IntegerTypes sequence:
// std::cout << IndexOf< void, IntegerTypes >::value << "\n";
}
我使用它的整數位置。所以如果你有一個你想要的整數類型的列表,你可以列出所有的類型,而上面的技術會給每一個整數(反向映射也相對容易 - 編譯時間索引進入列表中鍵入)。
'static_cast'如果它可以正確轉換。 'typeid'是運行時。 – chris
這是不可能的,從一種得到一個編譯時整,但你可以從綁定到一個類型,然後可轉換成整數的地址獲取運行時整... –
你能解釋一下多一點有關你在做什麼試圖在這裏做? –