在我的应用程序中,通过为结构引入特殊情况,我获得了大约 2 倍的加速。
简化后,我的代码如下所示:
class SpecialCase
{
private:
size_t values[10];
public:
void foo();
};
class GenericCase
{
private:
std::vector<size_t> values;
public:
void foo();
};
template <class Case> void bar()
{
Case case;
case.foo();
}
void somewhereElse()
{
if ( boring_runtime_condition )
{
bar<SpecialCase>();
}
else
{
bar<GenericCase>();
}
}
这段代码没有问题,但现在我必须通过另一个类来扩展应用程序:
class Problem
{
private:
std::vector<Case> cases;
public:
Case doSomething();
};
要同时使用 SpecialCase 和 GenericCase,我必须将整个类设为模板。由于我有几个特殊情况,这会大大减慢编译速度。我一点也不喜欢。
我从不在应用程序运行中混合 SpecialCase 和 GenericCase。我非常希望不必在每个方法中都将我的 Case 转换为特定类型,因为它会使代码膨胀,而其他开发人员可能会忘记它。
有没有一种避免这种疯狂模板的好方法?(也欢迎 C++11 解决方案)
免责声明:请不要告诉我有多棒std::vector
,我不应该使用特殊情况。我测量了性能,所以请不要发表您不相信 2 倍加速的评论。这是事实,这个问题与它无关。