【发布时间】:2011-07-11 20:50:33
【问题描述】:
所以,这里有一些基本的代码来说明我的问题:
#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);
}
对于具有不同数量参数的函数,我们有 2 个重载。然后我尝试在函子中转换单参数版本。当然,我遇到了以下错误:
test.cc:在函数'int main()'中: test.cc:13:29:错误:重载“ptr_fun()”的调用不明确 /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/bits/stl_function.h:437:5:注意:候选人是:std::pointer_to_unary_function std::ptr_fun(_Result (*)(_Arg)) [其中 _Arg = int,_Result = int] /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/bits/stl_function.h:463:5:注意:std::pointer_to_binary_function std::ptr_fun(_Result (*) (_Arg1, _Arg2)) [其中 _Arg1 = int,_Arg2 = int,_Result = int]我知道我可以直接投射 func 并完成它,但这让我想为什么会这样模棱两可? std::ptr_fun 的两个版本在模板定义中都没有默认参数,我已经明确表示这两个模板参数是int。
事实上,如果我只是像这样在模板实例化期间做编译器本质上在做的事情:
#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);
}
它编译得很好,不知何故歧义消失了!有人知道为什么会这样吗?
【问题讨论】: