类模板状态数据成员,而不是可以显式专门化的实体

9 c++ templates template-specialization visual-c++ explicit-specialization

我在下面的代码中出错:

template<typename T, bool B = is_fundamental<T>::value>
class class_name;

template<>
class class_name<string, false>{
public:
    static string const value;
};

template<>
string const class_name<string, false>::value = "Str";
// error: not an entity that can be explicitly specialized.?in VC++)
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Tem*_*Rex 7

你在这里混合两种不同的方法.第一个是@KerrekSB建议的那个

template<typename T, bool B = is_fundamental<T>::value>
class class_name;

// NOTE: template<> is needed here because this is an explicit specialization of a class template
template<>
class class_name<string, false>{
public:
    static string const value;
};

// NOTE: no template<> here, because this is just a definition of an ordinary class member 
// (i.e. of the class class_name<string, false>)
string const class_name<string, false>::value = "Str";
Run Code Online (Sandbox Code Playgroud)

或者,您可以完整地写出通用类模板并明确地专门化静态成员 <string, false>

template<typename T, bool B = is_fundamental<T>::value>
class class_name {
public:
    static string const value;
};

// NOTE: template<> is needed here because this is an explicit specialization of a class template member
template<>
string const class_name<string, false>::value = "Str";
Run Code Online (Sandbox Code Playgroud)