c++模板
2015-10-29 15:20
295 查看
参考《Linux多线程服务端编程》
1.一般模板的定义(即实现)要放到头文件中,否则会有链接错误
能否把实现发到库文件(.c .cpp)中?前提是要知道模板会有哪些具体化类型,并事先显示具体化出来-----即 在库文件(实现文件 .c .cpp)中实现 并
特化,如果不特化还是有连接错误
2.C++11新增了extern template特性--外部模板,可以阻止隐式模板具体化
很详细:http://book.51cto.com/art/201306/400331.htm
在使用外部模板的时候,我们还需要注意以下问题:
如果外部模板声明出现于某个编译单元中,那么与之对应的显示实例化必须出现于另一个编译单元中或者同一个编译单元的后续代码中;
外部模板声明不能用于一个静态函数(即文件域函数),但可以用于类静态成员函数(这一点是显而易见的,因为静态函数没有外部链接属性,不可能在本编译单元之外出现)。
在实际上,C++11中“模板的显式实例化定义、外部模板声明和使用”好比“全局变量的定义、外部声明和使用”方式的再次应用。不过相比于外部变量声明,不使用外部模板声明并不会导致任何问题。外部模板定义更应该算作一种针对编译器的编译时间及空间的优化手段。很多时候,由于程序员低估了模板实例化展开的开销,因此大量的模板使用会在代码中产生大量的冗余。这种冗余,有的时候已经使得编译器和链接器力不从心。但这并不意味着程序员需要为四五十行的代码写很多显式模板声明及外部模板声明。只有在项目比较大的情况下。我们才建议用户进行这样的优化。总的来说,就是在既不忽视模板实例化产生的编译及链接开销的同时,也不要过分担心模板展开的开销。
1.一般模板的定义(即实现)要放到头文件中,否则会有链接错误
能否把实现发到库文件(.c .cpp)中?前提是要知道模板会有哪些具体化类型,并事先显示具体化出来-----即 在库文件(实现文件 .c .cpp)中实现 并
特化,如果不特化还是有连接错误
2.C++11新增了extern template特性--外部模板,可以阻止隐式模板具体化
很详细:http://book.51cto.com/art/201306/400331.htm
在使用外部模板的时候,我们还需要注意以下问题:
如果外部模板声明出现于某个编译单元中,那么与之对应的显示实例化必须出现于另一个编译单元中或者同一个编译单元的后续代码中;
外部模板声明不能用于一个静态函数(即文件域函数),但可以用于类静态成员函数(这一点是显而易见的,因为静态函数没有外部链接属性,不可能在本编译单元之外出现)。
在实际上,C++11中“模板的显式实例化定义、外部模板声明和使用”好比“全局变量的定义、外部声明和使用”方式的再次应用。不过相比于外部变量声明,不使用外部模板声明并不会导致任何问题。外部模板定义更应该算作一种针对编译器的编译时间及空间的优化手段。很多时候,由于程序员低估了模板实例化展开的开销,因此大量的模板使用会在代码中产生大量的冗余。这种冗余,有的时候已经使得编译器和链接器力不从心。但这并不意味着程序员需要为四五十行的代码写很多显式模板声明及外部模板声明。只有在项目比较大的情况下。我们才建议用户进行这样的优化。总的来说,就是在既不忽视模板实例化产生的编译及链接开销的同时,也不要过分担心模板展开的开销。
相关文章推荐
- JNI在C 和 C++ 函数实现的不同
- C++11:原子操作
- c++ 基本数据类型总结
- leetcode 257 : Binary Tree Paths
- C++、C#、java算法学习日记02----选择排序(SelectSort)
- 探寻C++最快的读取文件的方案(转)
- C++中正确使用PRId64
- 字符串问题归类--C和C++
- 1018. 锤子剪刀布 (20)
- C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用
- C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解
- C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解
- c++二叉树的实现
- C++类成员和数据成员初始化总结
- C语言register关键字—最快的关键字
- [原]Java字符串的内存分配--从C语言字符串操作说起
- 学习笔记 const(部分转载)
- C语言文法定义与C程序的推导过程
- 1014 C语言文法定义与C程序的推导过程
- C语言文法 改