1
5
与使用静态方法的类相比,您应该更喜欢使用命名空间:
现在,让我们来谈谈组织:
[1]我的意思是:
一个激励人心的例子?Boost可以(使用商品标题)。
更重要的是,这不太贵:只需更换
对于链接器问题:所有未模板化的方法都应声明为
更新: 模板专门化的问题在于,您最终定义了一个现在的“普通”方法:一旦修复了每个参数,它就不再有任何模板了。因此,解决方案是像处理普通函数那样:在头文件中声明,在源文件中定义(因此只有一次)。 对这个奇怪的错误要更具体一些:C++的问题是,每个源文件都是孤立编译的:预处理器将包含并实际创建一个包含每一个包含的文件(按顺序)的单个文本文件,最后是源文件。编译器获取此文件并生成一个“.o”文件(用于gcc)。然后链接器启动并尝试从所有这些“.o”文件中实际创建一个库(或二进制文件),并检查每个方法只定义一次,否则它将如何在多个定义之间进行选择(不幸的是,不检查它们是否等效…)? 但是,模板方法和类有一个特殊的允许,它在所有实例化中(随机)选取一个(每个模板参数组合一个实例化)。当然,这假设所有这些都是相同的,并且您最终可能会因为以下事情而头疼:
这两行将打印相同的输出,不管是10还是20,都是未知的,并且可以在构建之间更改!!!! |
2
4
mylib名称空间是一种显而易见的方式——毕竟,这基本上就是标准库的方式,它可能比您的库大得多。在模板中出现大量的链接器错误是不常见的,除非您有大量的前向声明——通常应该尽量避免这种情况。 |
3
3
使用名称空间是正确的方法。就我个人而言,我不会将它们合并成一个“包括整个世界”的标题,因为这样会增加编译时间。其他人可能更喜欢单头的便利性。
如果有任何非模板函数,则必须声明它们
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |