A C++ 11模板函數,它接受一個功能對象參數,如:促進C++重載的函數指針函數對象的
template <typename F, typename T>
auto foo(F f, T x) -> decltype(f(x)) {
return f(x);
}
可以採取函數,例如:
int succ(int i) { return i+1; }
並應用到foo
和succ
獲得的10結果:
foo(succ,9);
重載˚F與 「不能推導出模板參數F」
foo(std::sin,0.5);
在GCC(4.7)
:unctions不工作,sin
,例如,將失敗。
(提供sin<double>
僅涉及複雜類型BTW。)是的,我能結構是正確的了:
template <typename T>
struct Sin {
T operator()(T x) { return std::sin(x); }
};
一點點:
foo(Sin<double>(),0.5);
我的問題是,是否有替代這避免了對這種新定義的需求;僅可在foo
的呼叫地點使用?
'static_cast'是一種選擇,雖然顯然不是理想的選擇。 – ildjarn 2012-03-23 00:18:22
你是什麼意思'罪'不起作用?它編譯罰款 – 2012-03-23 00:22:48
@VJovic:你是什麼意思,我的意思是?它不會編譯。你刪除的答案雖然。我不知道爲什麼。 – user2023370 2012-03-23 00:27:09