C++ “Lambda函数生成”;不明确的函数调用;尽管缺乏歧义,但仍存在错误

C++ “Lambda函数生成”;不明确的函数调用;尽管缺乏歧义,但仍存在错误,c++,lambda,C++,Lambda,所以我试图处理一个程序,它可以接受一个函数,它要么返回一个double向量,要么只返回一个double 不幸的是,当我尝试编译此文件(MSVC2010)时,出现以下错误: ambiguous call to overloaded function 我做的有什么明显的错误吗?我需要一种方法来区分这两者,并且我正试图避免黑客式的模板元编程 #include <iostream> #include <functional> #include <vector> s

所以我试图处理一个程序,它可以接受一个函数,它要么返回一个double向量,要么只返回一个double

不幸的是,当我尝试编译此文件(MSVC2010)时,出现以下错误:

ambiguous call to overloaded function
我做的有什么明显的错误吗?我需要一种方法来区分这两者,并且我正试图避免黑客式的模板元编程

#include <iostream>
#include <functional>
#include <vector>

std::vector<double> foo(std::function<std::vector<double>(unsigned int) > a){return a(10);}

double foo(std::function<double(unsigned int) > a){return a(11);}

int main(){
    foo([](unsigned int)->double{return 12.0;});
    return 0;
}
#包括
#包括
#包括
std::vector foo(std::function a){返回a(10);}
双foo(std::函数a){返回a(11);}
int main(){
foo([](无符号int)->double{return 12.0;});
返回0;
}
如您所见,我的返回类型被显式声明为double,但它无法决定调用哪个版本的
foo

我应该回到函数指针吗


非常感谢您抽出时间

在GCC4.9上编译得很好经过更仔细的研究,MSVC2010似乎不允许从lambda函数转换为函数指针或
std::function
。哦,那就太好了。也许我会抽空去买Visual Studio 2013。。。谢谢你!很高兴知道我没有胡思乱想。MSVC2010。C++11。我想相信。。。