我正在尝试编写一个模板类,可以根据<class>
我的传递形成类.问题是我不能在同一个.h
文件中声明和定义.在我的项目中,UTF工具只能处理.cpp
文件(代码覆盖等).我在博客中看到他们说"添加.cpp
而不是.h
".这是可取的吗?
Template.h
#ifndef TEMPLATE_H_
#define TEMPLATE_H_
template<class T>
class Template
{
public:
T Add(T a,T b);
};
#endif /* TEMPLATE_H_ */
Run Code Online (Sandbox Code Playgroud)
Template.cpp
#include "Template.h"
template<class T>
T Template<T>::Add(T a, T b)
{
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
Main.cpp
#include "Template.cpp" //Is this a good practise?
#include <iostream>
int main(int argc, char **argv) {
Template<int> obj;
std::cout<<obj.Add(3,4)<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如果这不可行,那么我该如何解决这个问题呢?export
?
必须在使用模板的每个翻译单元中定义模板。这意味着它们必须在头文件中定义。如果您的工具坚持要求扩展.cpp
,您也可以提供它,就像您所做的那样。
在这种情况下,您甚至不需要将伪标头拆分为.h
和.cpp
。.cpp
你可以把所有的东西都放进去#include
。