模板被另一个模块使用时是如何工作的

How templates works when consumed by another module

本文关键字:何工作 工作 另一个 模块      更新时间:2023-10-16

创建时,例如,一个通用链表(用List<T>表示),我总是被告知,如果我在某个地方使用List<int>,在其他地方使用List<short>,那么实际上编译器会生成List的两个不同实现,一个使用int,另一个使用short。这对我来说是有意义的,并且提醒了SGLIB在c中的工作方式。

但是我不明白当使用不同的编译模块时,这个过程是如何工作的。我的意思是,如果我用List<T>创建一个库,会生成哪些代码,因为不可能知道代码将如何被使用?List<char>的代码肯定会与List<int>的代码编译非常不同,那么这里发生了什么呢?

答案很简单:模板库通常不被编译,而只作为头文件发布。这是模板最大的缺点之一,计划在下一个标准中使用模块系统解决这个问题。