我可以使用模板作为常量吗?

时间:2014-07-28 17:41:12

标签: c++ c++11

我想编写代码如下:

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;

2 个答案:

答案 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;)

Live demo

答案 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,这不是标准类型)

它有点笨拙,但有效。