我有一個模板參數T
參數化的函數模板,給它不同的行爲,這取決於T
它與實例化。所需的具體變化非常簡單,只需調用靜態函數T::foo(some_args)
即可,因爲不涉及任何狀態。內聯和靜態函數調用運營商
但是我不想給foo
出現在函數模板的身體。
我寧願稱之爲T(some_args);
避免語法噪音。我相信聲明函數調用運算符()
是靜態的是不可能的(或是否?)。 T
沒有狀態,因此沒有實例特定的變量。
在事件上述是不可能的,什麼有更多的得到內聯的/優化(在G ++,鏘,ICC)機會
T::foo(some_args); // foo being a static function
或
T()(some_args); // operator() declared inline
我不知道組件檢查輸出結果,問題更多地來自學術/好奇心的觀點而不是實際表現。
是否真的T()(some_args)
分配在運行時的對象?還是通常優化呢?
嘗試在不同的優化級別,並查看生成的彙編代碼。它會告訴你對象創建是否已被優化。我的猜測不是,因爲你在一個實例上調用一個函數而不是一個靜態函數。 – 2013-02-11 08:43:05
你問什麼似乎很奇怪。如果T作爲仿函數,'T'應該定義'operator()'。如果是這樣的話,只需將一個實例(即使是臨時的)傳遞給函數,就像普通的函數一樣。如果它不是函子,調用'foo'就沒有語法噪音。 – Alex 2013-02-11 08:46:09
@JoachimPileborg正如我在我的問題中提到的,我不知道程序集來解決這個問題。所以任何簡單的演示都會很好。 – san 2013-02-11 08:46:24