1
在我的應用程序中,通過引入結構的特殊情況,我獲得了大約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倍加速的評論。這是事實,這個問題不是關於它的。
使用它不應該的'兩個分支,如果(boring_runtime_condition)交換? – 2013-03-09 11:08:53
@AndyProwl爲什麼會這麼重要?它是過於簡化的僞代碼。 – stefan 2013-03-09 11:10:02
沒關係。我只是想從中解脫出來 – 2013-03-09 11:11:01