[英]Way to keep template inference in C++03 with function objects?
我想提供一個(模板化的)函數,(帶有一個)帶有給定返回類型的函數式對象作為參數,並且理想情況下,我希望能夠在沒有顯式模板參數的情況下調用該函數。
到目前為止,我嘗試了:
template<A, B, F>
B some(A a, F f) { return f(a); }
template<A, B>
B some(A a, B (*f)(A)) { return some<A, B, B (*)(A)>(a, f); }
在我有重載的地方,至少對於函數指針來說,可以使模板args完全可推斷。 現在看來我無法對std::unary_function
進行模板專用化,因為它不包含operator()
成員,因此不適合作為F
而且,由於我無法通知編譯器我希望F具有B operator()(A)
,所以對於仿函數似乎似乎沒有任何解決方案。 還是可能以某種方式鍵入這種鴨子?
std::unary_function
只是其他類的基礎,應該提供operator()
。 根本不應該有unary_function
實例,所以我看不到問題-帶有3個模板參數的第一個函數是此類問題的正式解決方案。
編輯:如果要在沒有顯式模板參數的情況下調用該函數,則可以使用std::result_of
(C ++ 11)或boost::result_of
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.