当前位置: 首页 > news >正文

复制单页网站域名官网

复制单页网站,域名官网,电脑做网站,做网站会用到的色彩代码单词前言 模板是编程中高级工具,类似C语言的宏生成代码,但却比宏更强大,例如,对于调试的支持,以及实现更严格的语法检查。 如果用节省代码来定义工具的好坏,无疑不管用C语言宏来生成代码,或者用C的…

前言

模板是编程中高级工具,类似C语言的宏生成代码,但却比宏更强大,例如,对于调试的支持,以及实现更严格的语法检查。

如果用节省代码来定义工具的好坏,无疑不管用C语言宏来生成代码,或者用C++的模板,抑或其它代码生成技术都是非常可取的。

问题

在g++中使用到模板相关的引用,特别是目标为共享SO库的模块,会特别用到到-fno-implicit-templates的编译选项,禁止隐式模板实例化,来节省编译和链接期的代价,详细见官网说明。

根据官网建议,对于简单点的场景,可以选择在各个需要的模块自行模板实例化,以避免链接时出现类似undefined reference to std::vector<char, std::allocator<char> >::)M_insert_aux(...)的链接异常。

/*declaration*/
#include "Foo.h"/*implementation*/
#include "Foo.cc"/*显式实例化模板类*/
template class Foo<int>;/*显式实例化模板方法*/
template ostream& operator <<(ostream&, const Foo<int>&);

但我觉得更具工程价值的,是官网中建议的big file实施方案,原因如下:

  • 各个obj模块自行添加显式模板实例化,但还是会遇到公共模板实例化需要往big file中增加
  • 统一往big file中增加,便于维护,特别是引用依赖组件的模板,例如,ACE组件中的模板.

模板显式实例化弊端

模板实例化使用显式实例化的方法,有时即使对于简单的STL模板std::vector<char>的实例化操作起来都比较繁琐,所以,官网建议了 -fno-implicit-templates 选项控制分开编译的策略。

Compile your code with -fno-implicit-templates to disable the implicit generation of template instances, and explicitly instantiate all the ones you use.

If you use one big file to do the instantiations, you may want to compile it without -fno-implicit-templates, so you get all of the instances required by your explicit instantiations (but not by any other files) without having to specify them as well.

#include<iostream>
#include <vector>int main(void)
{std::vector<char> v;v.push_back('a');std::cout << "Hello World! no-implicit-templates , item: " << v[0] << std::endl;return 0;
}

对于Big File特别使用隐式实例化的编译脚本

.PHONY: app main clean cleanObjs
app: mainvpath %.h .
vpath %.cpp .SRC=$(wildcard *.cpp)
OBJS=$(patsubst %.cpp,%.o, $(SRC))
TARGET=a.outCCFLAGS:=-g3 -O0 -W -Wall -pipe -Wno-unused-variable -Wno-unused-parameter -fno-implicit-templates 
LDFLAGS:=-lstdc++main: $(OBJS)@echo "Link vector no-implicit-templates test program ..."g++ -pipe $(OBJS) -o $(TARGET) $(LDFLAGS)# depend & nested
$(OBJS): cleanObjs
tmplinst.o:@echo "Build $@ specially for big file ..."g++ $(strip $(subst -fno-implicit-templates, , $(CCFLAGS))) -c $(subst .o,.cpp, $@) -o $@
%.o: %.cpp@echo "Build $< to $@ ..."g++ $(CCFLAGS) -c $< -o $@clean: @echo "Clean all obj & target ..."  rm -rf $(OBJS) $(TARGET)@echo "Finish clean all obj & target ..."   cleanObjs:@echo "Clean all objs ..."  rm -rf $(OBJS)@echo "Finish clean all objs ..."   

对于其它编译目标统一使用默认的-fno-implicit-templates选项;但对于big file通过编译脚本命令subst ,特殊地去除-fno-implicit-templates选项,以达到转换成隐式实例化模板的目的

结束语

曾为std::vector<char>在不同的平台奋战过模板显式实例化,非常繁琐,后期维护起来也非常不方便;而且同时在ACE组件的模板显式实例化维护时,反复遭遇增加其它依赖的依赖模板显式实例化的修改,所以,从工程角度来看,不如对于big file特别使用隐式实例化!

对于有兴趣研究模板实例化过程的同学,可以使用全手工模板实例化

官网参考

GCC Template-Instantiation.html

http://www.zhongyajixie.com/news/8689.html

相关文章:

  • 长沙企业网站制作哪家好北京百度公司总部电话
  • 快递网站建站需要什么软件定制开发平台
  • 品牌建设成效有待提升seo综合查询中的具体内容有哪些
  • 嘉兴专业网站建设成都网站快速排名优化
  • 做网站建设的公司有哪些百度手机助手app免费下载
  • wordpress mac下载湖北seo诊断
  • 中山做网站公司哪家好营销软件
  • 有什么网站可以做运动小程序开发流程
  • 江苏建设工程建设网武汉排名seo公司
  • 2017网站建设湖南seo推广
  • 太原适合网站设计地址网站空间租用
  • 好搜360网站哈尔滨seo网络推广
  • 教做网站的学校微信营销怎么做
  • 想自己做一个网站百度seo多少钱一个月
  • 顺德互动交流网站成都网站制作费用
  • 建设游戏运营网站开展工作内容百度北京分公司官网
  • 兰州网站建设100优秀软文范例100字
  • 北京西站到八达岭长城最快路线如何做宣传推广营销
  • 手机怎么编辑网页牛排seo
  • 艺术网站模板全国各城市感染高峰进度查询
  • 网线制作实验报告总结江苏短视频seo搜索
  • 小企业网站建设系统哪个好新闻稿发布软文平台
  • wordpress 云服务器配置关键词排名优化报价
  • 医疗类网站建设亚马逊关键词搜索器
  • 找别人做网站可靠吗室内设计培训哪个机构比较好
  • 旅游景区网站建设技能培训学校
  • 通州专业网站制作做seo用哪种建站程序最好
  • 摄影网站建设内容如何拥有自己的网站
  • 麻涌镇网站仿做全国前十名小程序开发公司
  • 网站改版 更换域名2024年最新一轮阳性症状