模板实例化定义与实例化声明

#include<iostream>
#include "SmartDB.h"
using namespace std;
extern template class A<int>; //模板实例化声明
int main(int argc, char* argv[])
{ 
    A<int> obj1;

    /*比较疑惑的是不是说用了显示实例化定义以后,只会生成一个实例化的样本吗?
    这个样本应该只有Smart.obj文件才会有,可是mian.obj文件里面也会有,这一步
    我没想明白,估计是编译器升级导致的,不同的编译器有不同的效果吧,
    模板实例化定义就是为了避免在多个不同的源文件生成大量相同的实例化样本的。
    这个先不管它了*/
    obj1.fun(2); //用的是在其它文件当中生成的实例化样本,在链接这一步完成。
    return 0;
}
#include "SmartDB.h"
/*模板实例化定义,这个会导致fun和fun1会被实例化,可以通过把obj文件导出来观察*/
template class A<int>; 

template <typename T>
void A<T>::fun(T i)
{
    std::cout << i << std::endl;
}
template <typename T>
void A<T>::fun1(T i)
{
    std::cout << i << std::endl;
}
#ifndef SMARTDB_H
#define SMARTDB_H
#include <iostream>
using namespace std;
template<typename T>
class A {
public:
    void fun(T i);
    void fun1(T i);
};

#endif

导出目标文件
在这里插入图片描述
在这里插入图片描述
同样也可以试一下函数模板的实例化定义与声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值