【发布时间】:2020-01-20 21:26:18
【问题描述】:
我已经声明了一个这样的类:
snapshot.h
template<typename F>
class Snapshot
{
public:
template<typename T> void write(T field);
};
#include "snapshot.templates.cpp"
snapshot.templates.cpp
template<typename F, typename T>
void Snapshot<F>::write(T field)
{
printf("hello world\n");
}
但是编译器给出了错误declaration is incompatible with function template "void Snapshot<F>::write(T)"
在write()的定义中指定F和T这两个模板参数的正确语法是什么?
【问题讨论】:
-
如果您打算将模板的声明和实现分成两个文件,其中的实现包含在头文件中,那么我建议不要对实现文件使用
.cpp扩展名。.cpp通常表示应该将编译器作为翻译单元的源文件,并且构建系统/IDE 可能会自动以这种方式处理它,从而导致错误或 ODR 违规。模板实现文件的常见扩展名有.tpp、.tcc和others。