不允许函数模板部分专用化'swap<T>'

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

本文关键字:lt gt swap 函数模板部 不允许 专用      更新时间:2023-10-16

我很难使用模板。以下编译对我来说很好:

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

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

移除<T>:

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

该语法用于模板专门化。

此外,您很可能希望您的模板定义位于头文件中,请参阅为什么模板只能在头文件中实现?。