C ++模板函数和包含

时间:2014-02-18 21:22:38

标签: c++ templates include

我正在编写一个带有模板函数的类,并试图通过将它们移动到.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文件?

非常感谢

1 个答案:

答案 0 :(得分:1)

简短的故事:如果您事先知道要使用的类型并明确地将它们实例化为cpp文件,则可以。

正如康拉德指出的那样,如果您的 T 未绑定,我无法完成此任务。

请注意,将.h文件移动到cpp文件中可能是一种很好的做法,可以避免长时间的重新编译时间(如果这些标题发生变化(以及其他常见问题)),但在上面的情况下(增强标题)它不太可能因此从编译时的角度来看可能根本不需要改变。