功能模板部分专业化&#39; swap <t>&#39;不被允许

时间:2016-05-07 22:32:07

标签: c++ templates

我在模板上挣扎。以下编译对我来说很好:

//foo.h
class foo {
public:
    template <typename T>
    void swap(T* values, uint8_t offset)
    {
        T swp = values[offset];
        values[offset] = values[offset + 1];
        values[offset + 1] = swp;
    }
};

这不是:

//foo.h
class foo {
public:
    template <typename T>
    void swap(T* values, uint8_t offset);
};

//foo.cpp
template <typename T>
void foo::swap<T>(T* values, uint8_t offset)
{
    T swp = values[offset];
    values[offset] = values[offset + 1];
    values[offset + 1] = swp;
}

我收到错误消息

error: function template partial specialization 'swap<T>' is not allowed

我不知道这意味着什么,所以我不清楚如何继续。提前完成。

1 个答案:

答案 0 :(得分:1)

删除<T>

template <typename T>
void foo::swap(T* values, uint8_t offset)
{
    // …
}

该语法用于模板专业化。

此外,您很可能希望在头文件中使用模板定义,请参阅Why can templates only be implemented in the header file?