我正在阅读C ++入门第5版的书,我得到了这个:
使用模板时生成实例化的事实(§ 16.1.1,p。 656)意味着相同的实例化可能出现在多个目标文件中。当两个或多个单独编译源时 文件使用具有相同模板参数的相同模板,有 在每个文件中实例化该模板。
我不确定我是否正确使用,所以我在这里举了一个例子:
//test_tpl.h
template<typename T>
class Test_tpl
{
public:
void func();
};
#include "test_tpl.cpp"
//test_tpl.cpp
template<typename T>
void Test_tpl<T>::func(){}
//a.cpp
#include "test_tpl.h"
// use class Test_tpl<int> here
//b.cpp
#include "test_tpl.h"
// use class Test_tpl<int> here
根据上面的段落,在此示例中,Test_tpl被实例化(Test_tpl<int>
)两次。现在,如果我们使用显式实例化,Test_tpl<int>
只应实例化一次,但我不知道如何在这个例子中使用这种技术。
答案 0 :(得分:1)
您将使用
进行显式实例化// test_tpl.h
template<typename T>
class Test_tpl
{
public:
void func();
};
// test_tpl.cpp
#include "test_tpl.h"
template<typename T>
void Test_tpl<T>::func(){} // in cpp, so only available here
template void Test_tpl<int>::func(); // Explicit instantiation here.
// Available elsewhere.
// a.cpp #include“test_tpl.h”
// use class Test_tpl<int> here
// b.cpp #include“test_tpl.h”
// use class Test_tpl<int> here