我正在编写一个带有模板函数的类,并试图通过将它们移动到.cpp文件中去除.h文件中的包含。
我班的宣言如下:
// myclass.h
#include <boost/archive/text_oarchive.hpp>
#include <sstream>
class MyClass{
...
template<class T> void my_function(const T& t){
std::ostringstream os;
{
boost::archive::text_oarchive oa(os);
oa & t;
}
do_something(os);
}
}
鉴于我使用模板方法,其中T可以是任何东西,我必须在标题中提供定义。是否有可能重构此代码(通过定义一个我想的辅助函数)来启用移动
#include <boost/archive/text_oarchive.hpp>
进入.cpp文件?
非常感谢
答案 0 :(得分:1)
简短的故事:如果您事先知道要使用的类型并明确地将它们实例化为cpp文件,则可以。
正如康拉德指出的那样,如果您的 T 未绑定,我无法完成此任务。
请注意,将.h文件移动到cpp文件中可能是一种很好的做法,可以避免长时间的重新编译时间(如果这些标题发生变化(以及其他常见问题)),但在上面的情况下(增强标题)它不太可能因此从编译时的角度来看可能根本不需要改变。