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

c++: what is explicit instantiation

本文关键字:实例化 什么 c++      更新时间:2023-10-16

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

您将使用进行显式实例化

//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#包括"test_tpl.h"

// use class Test_tpl<int> here

//b.cpp#包括"test_tpl.h"

// use class Test_tpl<int> here