首页 > 解决方案 > 模板化的类应该和非模板化的类一样快吗?

问题描述

我有一个仅存在于集合中的非通用对象。我正在编写的一个库,它定义了对象,我们称之为它Collected,以及集合的两个实现,它们在不同的场景中应该有优势。让我们称它们为Collection1and Collection2。该集合是此应用程序中高速处理的核心,因此可以说性能是最重要的。

两者之间的代码Collected是相同的,除了 1) 接受其集合的 ctor 参数,以及 2) 存储它的成员变量。

所以,我很想用明显的代码更改来Collected 代替TemplatedCollected<class T>。使用该库的应用程序可以集中决定他们想要哪个,并定义MyCollectedTemplatedCollected<Collection1>TemplatedCollected<Collection2>

但是,如果有可能更快,我可以创建一个Collected1Collected2类相同的,除了它们支持的集合。(同样,该应用程序可以MyCollected根据他们的需求进行定义。)

标签: c++performancec++11templates

解决方案


模板化类的唯一开销是因为它们生成了一个新类。这需要编译时间编译内存,并可能导致生成更多程序代码。最后,模板的符号长度有时可能比您手写的要长。

然而,最后一点只是因为使用模板生成程序代码比手写更容易。如果您在模板上复制粘贴模板实现两次也不会更糟。

最大的代价是从头文件中分离模板实现有点让人头疼。

但是,您正在处理性能问题。如果性能很重要,您应该进行分析。您不应该排除使用模板的可能性——将优化放在一个地方并将其应用于两者的能力具有很高的价值。


推荐阅读