我目前正在进入模板,我正在尝试在我的课程中完全专门化一个类函数(只有相关的代码):
class item_t
{
public:
template<class T>
void set(const std::string &key, const T &value);
template<>
void set(const std::string &key, const std::string &value);
};
将导致此编译器错误(gcc 6.3.0):
Fehler: explicit specialization in non-namespace scope ‘class base::data::item_t’
template<>
^
我在这里缺少什么?根据我的理解,不可能部分专门化功能模板,但这是一个完整的专业化。
答案 0 :(得分:1)
您无法在类定义中明确专门化模板成员函数。您必须在之外(在命名空间范围内):
class item_t
{
public:
template<class T>
void set(const std::string &key, const T &value);
};
template<>
void item_t::set<std::string>(const std::string &key, const std::string &value)
{
}
在您的特定用例中,您甚至不需要专业化 - 过载也可以正常运行:
template<class T>
void set(const std::string &key, const T &value);
void set(const std::string &key, const std::string &value);