zoukankan      html  css  js  c++  java
  • 编译模板实例化

    如果头文件中共有模板的定义,而且该头文件被多处包含,就会为该模板创建多个编译好的副本。这样做当然可行,但在含有多个模板的大程序中,所有目标文件都会包含每个编译好的模板副本,这样会令编译时间变得很长,而且目标文件很大,

    下面是一些可选的方案:

    1、在源文件中,使用指示字#pragma  interface 和#pragma implementation,就只会创建一个编译后的模板。

    2、与使用两个prama相似,使用命令行选项-falt-external-templates编译所有源文件。这会告诉编译器只有在真正用到模块的时候才将编译后的模板实例包含进来。这种方法的一个重要特征,就是要对每个用到头文件的模块,头文件都必须相同。

    3、用命令行选项-frepo编译代码,这样创建的文件后缀为.rpo,每个.rpo 文件都列出了对应目标文件中的模板实例。然后会激活连接打包工具collect2更新.rpo文件,指示连接程序替换最后程序中的模板实例。这种方法唯一只在处理库的时候才有困难---除非相关的.rpo文件都存在,否则连接库中的模板实例就会失败。

    4、用-fno-implicit-templates编译代码,会令隐式的模板实例化失效,他会显示的初始化所需模板。虽然这种方法需要精确了解正在使用的是哪种模板实例,但这种方法确实令源代码更加清楚。

  • 相关阅读:
    Ubuntu下VSFTPD(五)(匿名FTP设置方法)
    Ubuntu下VSFTPD(六)(常见FTP命令及其功能) (
    ubuntu13.04装配oracle11gR2
    oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT_数据库的几种锁
    oracle建索引的可选项
    Oracle自定义函数
    C# WinForm开发系列
    为C#自定义控件添加自定义事件
    python 爬虫抓取心得
    C# 正则表达式学习
  • 原文地址:https://www.cnblogs.com/lobsterIT/p/5654330.html
Copyright © 2011-2022 走看看