文档章节

SLT - 4 - 编译模型

cotsnail
 cotsnail
发布于 2016/10/17 12:32
字数 539
阅读 10
收藏 0

四 、编译模型

1.单一模型:

将函数,类和模板的声明,实现和使用放在同一

声明
实现
使用

优点:一目了然,构建方便
缺点:难以维护,难以复用,不利于协作开发

2.分离模型:

将函数、类和模板的声明、实现和使用分别放在不同的源代码文件中

优点:易于维护,易于复用,便于协作开发
缺点:需要编写专门的构建脚本————makefile
致命:编译模板实现代码时,编译器看不到对模板的使用,因此所生成的目标模块中没有关于该模板的二进制指令,最终导致链接失败
参见:div/

3.包含模型:

在模板声明文件的尾部包含模板实现文件,保证所有使用该模板的代码在头肩扩展以后都实际包含了该模板的声明和使用,保证延迟编译的顺利进行,链接成功。
优点:解决了分离模型的致命问题——链接失败
缺点:模板的实现代码必须公开,延长编译时间。
参见:inc/

4.实例模型:

在模板的实现中包含对该模板的显示实例化代码,旨在迫使编译器在看到对模板使用之前,提前二次编译,
保证链接通过。
优点:模板的实现代码不必公开,编译时间不受影响
缺点:实例化类型有限,无法实现绝对通用。

5.导出模型:

通过export关键字将模板声明导出,编译器会将该模板一次编译之后形成的内部表示缓存到其目标文件(.o)中在链接阶段结合使用该模板的代码所提供的类型实参,完成二次编译。
优点:代码分离、实现不公开、编译速度快,类型通用。
缺点:绝大多数编译器并不支持该模型。
GNU / MIicrosoft / IBM / Oralce / HP 都不支持
 C++2011 / 2014 / 2017 已经废弃此模型。export关键字已经被挪作他用。

© 著作权归作者所有

cotsnail
粉丝 1
博文 19
码字总数 19293
作品 0
广州
程序员
私信 提问
邓晓波/FxLib

FxLib FxLib 是一款游戏服务器架构 网络底层实现了 tcp udp websocket 的链接方式 并实现了linux跟win跨平台的功能 内容 Net: 封装的网络传输库 Database: 封装的数据库相关 RedisCon: 封装的...

邓晓波
2017/12/28
0
0
【天宇分析】Social Lending Network:币圈的蚂蚁金服

今日比特币恐慌指数&相似的行情 最近一直在留意比特币恐慌指数,今天依然是极度恐慌,行情依然是凉凉。 昨天开始时有张图开始在币圈流行

陈天宇123
2018/08/12
0
0
java版两图对比相似度

import javax.imageio.; import java.awt.image.; import java.awt.;//Color import java.io.; public class PhotoDigest{ public static void main(String[] args)throws Exception{ String......

Mstart
2016/07/08
311
0
IE6使用add方法添加optGroup的bug

合理的使用optGroup元素,可以极大地增强select下拉列表框的表现能力。我是比较喜欢在select中使用optGroup做数据分类的,不过不知道微软搞什么飞机,就这么一个html标签bug还真是不少。刚才...

唐玄奘
2017/12/24
0
0
在Web页面中控制其元素的选择状态

为了在Web页面上使用文本搜索,在文本框内实现选择效果,在页面上屏蔽选择状态等。我们需要使用脚本(如JavaScript)来精确的控制页面中UI元素的选择状态。下面从操作元素选择区和屏蔽元素被选...

唐玄奘
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式

//分静态代理和动态代理,区别:是否再编译时知道被被代理的对象 //思想,被代理类将自己的处理交给代理类,代理类可以添加一些新的功能,之后有代理类和客户端交互 https://www.cnblogs.co...

南桥北木
32分钟前
2
0
Spring系列教程七: Spring 整合mybatis的四种方式

一、使用注解实现整合mybatis 项目目录如下 第一步、导入jar包 <build> <resources> <!-- mapper.xml文件在java目录下 --> <resource> ......

我叫小糖主
38分钟前
6
0
阿里P7架构师:这些技术点没搞懂,我劝你不要跳槽!

阿里P7架构师架构师:这些技术点没搞懂,我劝你不要跳槽! 哪些技术点呢? 废话不多说,技术点全在下面这6张图里面了! 1.怎么看源码? 2.分布式 3.微服务 4.性能优化 5.工程化 粉丝福利:一...

别打我会飞
56分钟前
6
0
易错题

父类必须有一个无参构造,不然会报Implicit super constructor Parent() is undefined. Must explicitly invoke another constructor...

architect刘源源
今天
1
0
使用Json4s 将带有Timestamp的对象转json时 变为所在时区

在有Timestamp属性的对象转json时 最后出来的时间会减小8小时,是因为变成了0时区,需要将隐式转换中添加设置本地时区 import org.json4s.{DefaultFormats, Formats}import org.json4s.jac...

可达鸭Go
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部