我有一個模板函數接收函數對象。有時函數對象是無狀態結構,但有時它們是大型有狀態對象。函數對象的狀態在這個函數中不會被改變,只會被檢查。我也非常熱衷於編寫能夠儘可能優化編譯器的代碼。在選擇參數類型時我應該考慮什麼?函數對象的正確參數類型是什麼?
功能是這種類型的:
template<typename funcT>
auto make_particle(funcT fun) {
Particle<typename funcT::result_type> particle;
particle = fun();
return particle;
}
參數類型也許應該funcT const & fun
,這樣大的物體不會被複制,但爲什麼大多數人使用的調用 - 值函數的對象?我是否使用const引用丟失了某些東西?還是應該使用左值參考?請注意,C++ 1y可以,上面的代碼示例只是一個示例。
你可以很容易地解決這兩種情況與一個單一的參考參數 - T &&,又名通用引用。 – Xeo
@Xeo:最初我想提供一個*函數*,而不是模板,所以我一直在尋找一個解決方案。你當然是對的,因爲我們已經有了模板,所以我們不妨使用它們。 –