時,我有以下代碼:傳遞baz
當重載決議函數模板傳遞給另一個函數
template<typename T>
void bar(int x, T y)
{
}
void baz(int x, int y)
{
}
template<typename T0, typename T1>
void foo(void k(T0, T1), T1 t)
{
}
int main()
{
foo(baz, 10); // OK
foo(bar, 10); // ERROR
return 0;
}
超載分辨率foo
正常工作。但是,在傳遞函數模板bar
時,編譯器無法推斷foo
的模板參數T0
,即使範圍中只有一個bar
,並且其第一個參數完全解析爲int
。如何編寫功能模板foo
,以便類似foo(bar, 10)
這樣的調用可以由編譯器解決?
是的,我明白了爲什麼我當前的例子是不可抵扣的原因。我的問題是如何重寫函數模板'foo'?換句話說,是否有一些幫助可以在函數定義站點而不是呼叫站點提供編譯器,這樣可以工作?函數模板作爲參數並不是前所未有的。例如,'std :: endl'是一個函數模板。 – keveman 2012-08-14 23:10:54
@keveman「_例如,std :: endl是一個函數模板。」但是'basic_ostream :: operator <<'不是! – curiousguy 2012-08-16 23:13:20