C++模板编程(6)---实际运用模板:分离式模型(Separation Model)

1. 关键词export

前面两篇文章都可以有效解决模板实例化,而且完全符合C++标准。但是C++标准还提供了另一种机制,可以导出(export)一个template。这种机制称为C++模板的分离式模型separation model。

原则上,export的使用相当容易:将template定义于某文件中,并将定义式及其所有非定义声明nondefinition加上关键词export。以先前出现的例子而言,这会导致如下的函数模板function template声明:

//myfirst.hpp

#ifndef MYFIRST_HPP

#define MYFIRST_HPP

export

template <typename T>

void print_typeof (T const&)

#endif

exported templates 可被直接拿来使用,不需要现场看到template定义文件。换言之,template的使用和定义可以分隔于两个不同的编译单元。

如果不加export,原先程序代码会引发链接错误,新版本可以顺利链接。

由于本环境是C++11,不能支持export模板方式,报如下错误,

关键词export适用于function template, class templates成员函数、。

注意两点:

1)inline函数不能导出 ;

2)export不能与inline合用,且export总是在关键词template之前。

2. 分离式模型Separation Model的局限

首先,只有一家公司支持export;

其次,export不支持源码级管理工具管理,依存关系的工具

最后,导致令人吃惊的语义问题,后面详细解释。

3. 为分离式模型预做准备

可以用预处理指令(preprocessor directive)。在置入式和分离式模型之间切换:

//如果定义了USE_EXPORT,就使用关键词export

#if defined(USE_EXPORT)

#define EXPORT export

#else

#define EXPORT

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值