【发布时间】:2013-03-21 08:54:03
【问题描述】:
当我尝试用 Clang 编译它时
template<class T>
struct Field
{
char const *name;
Field(char const *name) : name(name) { }
};
template<class Derived>
class CRTP { static Field<Derived> const _field; };
class Class : public CRTP<Class> { };
Field<Class> const CRTP<Class>::_field("blah");
int main() { }
我明白了
error: template specialization requires 'template<>'
Field<Class> const CRTP<Class>::_field("blah");
~~~~~~~~~~~ ^
我完全不明白这个错误。我对_field 的定义有什么问题,我该如何解决?
(请注意,_field 的参数不一定对所有子类都相同。)
【问题讨论】:
-
您是否尝试过添加模板?
-
@AlexChamberlain:哈哈,不,我完全不明白这与专业化有什么关系,因为我没有专业化任何东西......我真的没想到会去方向。
-
@Mehrdad:实际上,您正在为
Class类专门化您的类模板的static数据成员(根据 17.4.3/1,static数据成员可以专门化,只是像成员函数) -
@AndyProwl:啊……我不知道你可以专门化一个成员,我以为你只能专门化一个类/函数。太棒了,谢谢!
-
@Mehrdad 尽可能按字面意思阅读 clang 错误消息...
标签: c++ templates clang template-specialization crtp