C++模板编译方式

1. 包含式:

    声明和定义都放在*.h文件,调用者直接调用此*.h。

   缺点:代码暴露,编译时间长。

2. 分离式

   声明和定义分离,但是在*.CPP定义构造和析构函数时要注意,在函数体里是否要添加<T>,不同编译器不一样

这种分离式可写成DLL形式,*.h类声明前注明 ..EXPORT...就行。在主程序可调用(同样需要包含.CPP)

(1)不包含,MINGW, VS都能编译

template<class T>
CMax<T>::CMax()
{
}

(2)包含,VS支持,MINGW不行

template<class T>
CMax<T>::CMax<T>()
{
}

这种方式调用,需要调用者包含*.cpp

3. 改进显示实例化

对第二种方式,很明显要向用户暴露*.CPP代码,形式上感觉分离了,但实际上没什么卵用。这时候最好

给出一个中间接口来进行封装。这样不能暴露代码,且能节省编译时间。举例说明

// -----  alg.h --------------------------------------------------

#pragma once

template<class  T>

class alg

{

    T add(T a, T b);

}

// -----  alg.cpp --------------------------------------------

#pragma once

#include “alg.h”

template<class T>

T alg<T>::add(T a, T b)

{

return a + b;

}

// -----  alg_instance.h--------------------------------------------

template class alg<int>;

template class alg<double;

//---------------- main.cpp --------------

#include "alg_instance.h"

main()

{

    alg<int>  ai;

    int sum = ai.add(3, 5)

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值