爲什麼F
不能推導爲proxy()
?無法推斷出作爲函數的模板參數
它應該是可能的,因爲我限制它 - 僅適用於返回int
的函數。
#include <utility>
#include <iostream>
#include <type_traits>
using namespace std;
int foo(int bar) {
cout << "int" << endl;
return 2;
}
float foo(float bar) {
cout << "float" << endl;
return 1;
}
template <typename F, typename... Args>
typename enable_if<
is_same<
typename result_of<F(Args...)>::type,
int
>::value,
typename result_of<F(Args...)>::type
>::type
proxy(F func, Args&&... args) {
return func(forward<Args>(args)...);
}
int main() {
proxy(foo, 5);
}
以下是錯誤:
b.cpp:29:17: error: no matching function for call to 'proxy(<unresolved overloaded function type>, int)'
b.cpp:24:1: note: template argument deduction/substitution failed:
b.cpp:29:17: note: couldn't deduce template parameter 'F'
由於有功能的兩個重載...編譯器不能推斷上的基本價值未來(下一個)函數的參數...'代理(static_cast(foo),5);'會在這裏做的伎倆 –