自己试过的两个方法:
#includetemplate struct IndexOf; template struct IndexOf { static constexpr int value = -1; };, template
struct IndexOf { static constexpr int temp = std::is_same
::value ? 0 : IndexOf
::value; static constexpr int value = std::is_same
::value ? 0 : temp == -1 ? -1 : 1 + temp; }; template
class Test { public: template constexpr int GetIndex(T) { constexpr int i = IndexOf ::value; return i; } }; int main() { Test t; int i = t.GetIndex(float()); int j = t.GetIndex(std::string()); int m = t.GetIndex(char()); int k = t.GetIndex(int()); std::cout << i << std::endl; std::cout << j << std::endl; std::cout << m << std::endl; std::cout << k << std::endl; return 0; };
另外一个:
#includetemplate struct IndexOf; template struct IndexOf { static constexpr int value = -1; }; template
struct IndexOf { static constexpr int value = 0; }; template
struct IndexOf { static constexpr int temp = IndexOf
::value; static constexpr int value = temp == -1 ? -1 : 1 + temp; }; template
class Test { public: template constexpr int GetIndex(T) { constexpr int i = IndexOf ::value; return i; } }; int main() { Test t; int i = t.GetIndex(float()); int j = t.GetIndex(std::string()); int m = t.GetIndex(char()); int k = t.GetIndex(int()); std::cout << i << std::endl; std::cout << j << std::endl; std::cout << m << std::endl; std::cout << k << std::endl; };
两种方式都可以得到类型的位置,不过第二种方式,我不确定在其它编译器上是否也有效。



