c ++:什么是显式实例化

时间:2016-05-18 17:27:54

标签: c++ templates explicit-instantiation

我正在阅读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>只应实例化一次,但我不知道如何在这个例子中使用这种技术。

1 个答案:

答案 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