为什么const变量对于通过常量进行模板专业化是必需的

时间:2018-07-11 15:07:02

标签: c++ templates template-specialization

我试图了解常量模板的专业化。考虑以下具有一种专长的模板功能:

enum class NodeType
  {A, B, C};

template<NodeType>
bool afunc()
{
  cout<<"calling generic"<<endl;
}

template<>
bool afunc<NodeType::A>()
{
 cout<<"calling specific"<<endl;
}

我能够按以下方式调用专用实例:

 const NodeType x = NodeType::A;

  afunc<x>();

但是,如果我删除const,则编译器会抱怨模板/参数推导失败。为什么需要const?

1 个答案:

答案 0 :(得分:7)

模板仅是编译时的东西。如果删除const,则x不再是编译时常量,因此不能用作模板参数。

还要注意,x只是一个编译时常量,因为您是在初始化时就这样定义的。