我在模板上挣扎。以下编译对我来说很好:
//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
我不知道这意味着什么,所以我不清楚如何继续。提前完成。
答案 0 :(得分:1)
删除<T>
:
template <typename T>
void foo::swap(T* values, uint8_t offset)
{
// …
}
该语法用于模板专业化。
此外,您很可能希望在头文件中使用模板定义,请参阅Why can templates only be implemented in the header file?。