有一个轻量级类在代码中起着核心作用。实际上,有两种变体(例如,V0
和V1
);都有方法do_it()
。此方法在V0
和V1
中大约需要10个浮点运算(FPO)。这是一个很小的数字,但do_it()
一直被调用,总体来说这些调用占用了执行时间的30% - 70%。C++:模板的替代解决方案
在我目前的实施V0
和V1
是依赖于他们如此的do_it()
正确的变体在编译时决定的所有其他类模板参数。
的问题基本上是任何类代码使用V
或使用使用V
,所以在实践中所有的类都是模板类。随着时间的推移,它变得有点烦人,很难维护。
我可以使用C++的其他机制来代替模板吗?任何人都可以估计这种情况下的开销吗?当然,我会好好学习的实际数字,当我重写代码,但是这是一个相当投资
编辑 也让我提供了一个(非常简化的)例子:
假设V0
和V1
是点在二维空间。 V0
在一个平面上,并且在球体上有V1
。 do_it()
是计算点之间并在V0
的情况下的距离的方法是比V1
快得多然后,我有类例如Points<V>
其中从std::vector<V>
继承,RandomWalk<V>
,保持一个参考Points<V>
,大量的分析代码等plot_distribution<V>(Points<V>)
等
也许在未来的某个时刻,用户将被允许提供其自己的几何形状例如一个圆环。但是到目前为止,只允许两种几何形状,并且它们不会同时出现在程序中。
这是为什么这么烦人?你把所有的东西都放在头文件中吗? –
是的,如果* .hh中的代码为90%。我不喜欢它。 – tnorgd
您可以将方法定义移动到cpp文件,并显式实例化所有内容。对于每个类模板,只需要两个实例,即“someclass'和'someclass '。 –