用"模板"编写C或C++库

Tim*_*Tim 6 c c++ templates

(1).使用C++模板时,编译器(例如g ++)不能直接编译模板定义(只能​​在头文件而不是源文件中)是正确的,而是根据每个实例的模板定义生成代码,然后为其实例化编译生成的代码?

(2).如果我想编写一个提供模板类和模板函数的C++库,是不可能将库编译成共享文件(.so,.a),因为它们的实例化不会出现在库的代码中的任何地方,而只会出现在用户的程序?如果是,是否意味着模板库只是源代码文件而不是预编译文件?

如何实现C++标准模板库(STL)?它的源代码是否与用户程序一起预编译或编译?

(3).在C中,

如何在C++中编写一个提供类似模板函数的函数的库?重载是一个很好的解决方案吗?

如果我必须为不同类型的参数将一个过程写入不同的函数,那么代码重用是否有好的方法?这是一个很好的方法来做到这一点http://www.vlfeat.org/api/imop_8c_source.html?还有其他方法吗?

感谢致敬!

Ale*_*min 13

使用C++模板时,编译器(例如g ++)是否会编译模板定义是正确的.

是.这是一个正确的假设.

模板定义是不完整的代码.您需要在编译之前填写模板参数.

如果我想编写一个提供模板类和模板函数的C++库,是不可能将库编译成共享文件(.so,.a)

不,这是不可能的.您只能编译模板的单个实例.

如何实现C++标准模板库(STL)?它的源代码是否与用户程序一起预编译或编译?

STL代码的很大一部分驻留在头文件中,并与您的应用程序一起编译.

在C中,如何在C++中编写一个提供类似模板函数的函数的库?这是一个很好的方法来做到这一点 http://www.vlfeat.org/api/imop_8c_source.html?还有其他方法吗?

在重新定义宏之后多次包含相同的文件(如您提供的链接中所示)是一种很好的方法.