我试图了解常量模板的专业化。考虑以下具有一种专长的模板功能:
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?
答案 0 :(得分:7)
模板仅是编译时的东西。如果删除const
,则x
不再是编译时常量,因此不能用作模板参数。
还要注意,x
只是一个编译时常量,因为您是在初始化时就这样定义的。