Burada, soruyu gösteren bazı temel kodlar:şablon parametreleri verildiğinde bile ptr_fun bunu belirsiz buluyor?
#include <functional>
int func(int x) {
return x;
}
int func(int x, int y) {
return x + y;
}
int main() {
std::ptr_fun<int, int>(func);
}
Farklı sayıda parametreye sahip bir fonksiyon için 2 aşırı yükümüz var. Sonra tek parametre sürümünü bir functor’da çevirmeye çalışırım. Tabii ki, aşağıdaki hatayla karşılaştım:
test.cc: In function 'int main()': test.cc:13:29: error: call of overloaded 'ptr_fun()' is ambiguous /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/bits/stl_function.h:437:5: note: candidates are: std::pointer_to_unary_function std::ptr_fun(_Result (*)(_Arg)) [with _Arg = int, _Result = int] /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/bits/stl_function.h:463:5: note: std::pointer_to_binary_function std::ptr_fun(_Result (*)(_Arg1, _Arg2)) [with _Arg1 = int, _Arg2 = int, _Result = int]
func
func
ve ile bitmiş olabilir biliyorum, ama
düşünüyorum neden bu belirsiz olduğunu düşünüyorum? Xzx55 sürümünde şablon tanımlarında varsayılan parametreler yoktur ve iki şablon parametresinin
int
olduğunu açıkça belirttim.
Aslında, derleyicinin esas olarak şu anda şablon örnekleme sırasında ne yaptığını yaparsam:
#include <functional>
int func(int x) {
return x;
}
int func(int x, int y) {
return x + y;
}
std::pointer_to_unary_function<int,int> my_ptr_fun (int (*f)(int)) {
return std::pointer_to_unary_function<int,int>(f);
}
int main() {
my_ptr_fun(func);
}
Sadece iyi derler, her nasılsa belirsizlik gider! Bunun neden böyle olduğuna dair bir kimse var mı?
Hmm, Sanırım takip ediyorum. Derleyici, hem 2 şablon argüman versiyonunu (Arg, Ret), hem de 3 argüman versiyonunu (Arg, Arg, Ret) 'yi deniyor ve' ''' 2 'Arg's ile eşleştirmeye çalışıyor ve denemeye çalışıyor. 'Ret' sonucunu çıkarmak? –
@Evan - evet, söylemeye çalıştığım şey buydu. – Node