有一個輕量級類在代碼中起着核心作用。實際上,有兩種變體(例如,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 '。 –