Meh*_*dad 7 c++ templates clang crtp template-specialization
当我尝试用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() { }
Run Code Online (Sandbox Code Playgroud)
我明白了
error: template specialization requires 'template<>'
Field<Class> const CRTP<Class>::_field("blah");
~~~~~~~~~~~ ^
Run Code Online (Sandbox Code Playgroud)
我根本不明白这个错误.我的定义有什么问题,_field如何解决?
(注意,_field所有子类的参数不一定相同.)
dyp*_*dyp 12
为了让编译器将其识别为模板特化(例如,为了能够检查语法),您需要template关键字:
template<>
Field<Class> const CRTP<Class>::_field("blah");
Run Code Online (Sandbox Code Playgroud)
它的括号是空的,因为所有模板参数都是专用的,但你不能把它留下.