c++:什么是显式实例化
c++: what is 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>
应该只实例化一次,但我不知道如何在这个例子中使用这种技术。
您将使用进行显式实例化
//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
相关文章:
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 什么是当前实例化?
- 函数模板实例化、替换和重载解析的顺序是什么?
- 从 c++ 中的实例化进程获取输出的可靠方法是什么?
- 在不使用默认构造函数的情况下声明 POD 结构时,会实例化什么?
- 使用大括号实例化 - 它是什么,为什么在这里使用它?
- 创建实例化所有其他类和子系统的类的目的是什么
- 显式实例化失败的原因是什么
- 我做了什么?需要在模板化类的方法中实例化派生类
- 当我创建一个int指针并实例化一个数组时,数组在内存中发生了什么
- 在显式实例化向量时<someType>,someType 默认构造函数的用途是什么?
- 在C++中实例化带大括号与不带大括号的变量有什么区别?
- 两者之间的最佳方法是什么:实例化对象或使用指针
- c++:什么是显式实例化
- C++:在堆栈中实例化类的正确方法是什么
- 在这个失败的C++类实例化中,我忽略了什么明显的事情
- 静态成员与静态常量成员实例化 - 有什么区别?
- C++模板实例化,它到底是什么意思
- 当用字符串文字实例化时,模板T和参数到底是什么?
- 定义和实例化的区别是什么?