专业化的模板化功能

时间:2017-11-15 10:04:20

标签: c++ templates

我目前正在进入模板,我正在尝试在我的课程中完全专门化一个类函数(只有相关的代码):

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<>
           ^

我在这里缺少什么?根据我的理解,不可能部分专门化功能模板,但这是一个完整的专业化。

1 个答案:

答案 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);