我有一个类是性能敏感的代码路径的核心组件,所以我试图尽可能优化它。使用的类是:将C++模板对象存储为相同类型
class Widget
{
Widget(int n) : N(n) {}
.... member functions that use the constant value N ....
const int N; // just initialized, will never change
}
的参数的构造函数在编译时就知道,所以我已经改变了这个类的模板,所以N可以编译成的功能:
template<int N>
class Widget
{
.... member functions that use N ....
}
我有一个方法另一类:
Widget & GetWidget(int index);
然而,模板化的widget后,每个插件具有不同的类型,所以我不能这样定义功能了。我考虑了不同的继承选项,但我不确定模板的性能增益会超过继承函数调用的成本。
所以,我的问题是这样的:
我敢肯定我想两全其美(编译时间/运行时间),它可能是不可能的。但是,有没有办法在编译时获得知道N的性能,但是仍然能够将Widgets作为相同类型返回?
谢谢!
我还没有专门介绍这一点,但我们一直在寻找这段代码一段时间,并且我们所做的每一次小改变实际上都会影响性能(经常使用它,即300,000次/秒)。 – JaredC 2011-01-08 16:04:02
@JaredC,那么你将不得不使用基类方法。我曾经遇到过类似的场景 - 3D渲染,我需要一张面部列表,其中一些有3个顶点和4个顶点。模板类的基类有一个纯虚拟的`render`方法,可以减少堆分配和使用循环展开,导致显着的加速。 – 2011-01-08 17:21:53
我会试一试并测量性能,谢谢。 – JaredC 2011-01-08 18:03:09