VC ++中嵌套lambdas的问题

时间:2011-09-02 05:54:54

标签: visual-c++ compiler-construction lambda

有谁知道为什么这段代码无法与VC ++ 2010兼容

class C
{
public:
    void M(string t) {}
    void M(function<string()> func) {}
};

void TestMethod(function<void()> func) {}

void TestMethod2()    
{
    TestMethod([] () {
        C c;            
        c.M([] () -> string { // compiler error C2668 ('function' : ambiguous call to overloaded function)

             return ("txt");
        });
    });
}

更新

完整代码示例:

#include <functional>
#include <memory>
using namespace std;

class C
{
public:
  void M(string t) {}
  void M(function<string()> func) {}
};

void TestMethod(function<void()> func) {}

int _tmain(int argc, _TCHAR* argv[])
{
   TestMethod([] () {
      C c;
      c.M([] () -> string { // compiler erorr C2668 ('function' : ambiguous call to overloaded function M)
          return ("txt");
      });
    });
    return 0;
}

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

你没有发布错误信息,所以通过查看我的水晶球我只能得出结论你遇到了这些问题:

缺少#includes

你需要在顶部

#include <string>
#include <functional>

缺少姓名资格

您需要添加

using namespace std;

using std::string; using std::function;

或     std :: function ...     std :: string ...

缺少函数main()

int main() {}

适用于g ++

foo@bar: $ cat nested-lambda.cc

#include <string>
#include <functional>

class C
{
public:
    void M(std::string t) {}
    void M(std::function<std::string()> func) {}
};

void TestMethod(std::function<void()> func) {}

void TestMethod2()    
{
    TestMethod([] () {
        C c;            
        c.M([] () -> std::string { // compiler error C2668 
             return ("txt");
        });
    });
}

int main() {
}

foo@bar: $ g++ -std=c++0x nested-lambda.cc

工作正常。