我想编写代码如下:
template<typename T> const int a;
template<> const int a<float>=5;
template<> const int a<double>=14;
template<> const int a<char>=6;
template<> const int a<wchar>=33;
答案 0 :(得分:6)
是的,如果您的编译器支持C ++ 1y variable templates功能,则可以。
template<typename T> const int a = 0;
template<> const int a<float> = 5;
template<> const int a<double> = 14;
template<> const int a<char> = 6;
template<> const int a<wchar_t> = 33;
我在专业化的>
和=
之间添加了空格,因为clang遇到了解析错误,否则
错误:直角括号和等号之间需要一个空格(使用&#39;&gt; =&#39;)
答案 1 :(得分:5)
适用于所有C ++版本的解决方案(包括C ++ 11之前的版本):
template<typename T>
struct a { static const int value; };
template<> const int a<float>::value = 5;
template<> const int a<double>::value = 14;
template<> const int a<char>::value = 6;
template<> const int a<wchar_t>::value = 33;
(请注意,问题使用wchar
,这不是标准类型)
它有点笨拙,但有效。