C++ c++;lambda代表
编辑:嗯,在其他人的建议下,我创建了一个最小的例子。。。它成功了,所以我将在这里为将来的任何人分享它。以下是工作代码:C++ c++;lambda代表,c++,visual-c++,lambda,c++11,visual-studio-2012,C++,Visual C++,Lambda,C++11,Visual Studio 2012,编辑:嗯,在其他人的建议下,我创建了一个最小的例子。。。它成功了,所以我将在这里为将来的任何人分享它。以下是工作代码: #include <iostream> #include <functional> using namespace std; class myClass { char* str; public: myClass() { str = ""; } void funcA() {
#include <iostream>
#include <functional>
using namespace std;
class myClass
{
char* str;
public:
myClass()
{
str = "";
}
void funcA()
{
funcB([](myClass* mc)
{
mc->str = "HelloWorld";
}
);
}
void funcB(std::function<void (myClass*)> otherFunc)
{
otherFunc(this);
}
void printStr()
{
cout << str;
}
};
int main()
{
myClass mc;
mc.funcA();
mc.printStr();
int done;
cin >> done;
}
#包括
#包括
使用名称空间std;
类myClass
{
char*str;
公众:
myClass()
{
str=“”;
}
void funcA()
{
funcB([](myClass*mc)
{
mc->str=“HelloWorld”;
}
);
}
void funcB(std::function otherFunc)
{
otherFunc(本);
}
void printStr()
{
不能做;
}
我的原始代码不起作用的原因是我将funcB的声明和实现分为两部分(.h和.cpp),在.h中我这样做了
void funcB(std::function<void (myClass*)> otherFunc = NULL)
void funcB(std::function otherFunc=NULL)
据我所知,你绝对不能在这里传递NULL,这对我来说很烦人,希望是一个bug。但除此之外,它是有效的。你不能传递
NULL
但是你可以传递nullptr
请发布编译器错误。你的lambda不是void(TravelManager*)格式的
根据您的函数原型的要求。它只是void()
要匹配std::function
参数,您的lambda必须按参数使用TravelManager*
。发布一个最小的完整示例,以及您得到的错误。请参阅。这里没有人知道您在哪一行得到错误,任何类型的定义可能相关,也可能不相关,等等。如果您的最小示例没有如果将问题与实际代码相同,那么它就不是一个真正的示例…;-]+1实际上,无论是std::function otherFunc=std::function()
还是std::function otherFunc=nullptr
都可以,但显然后者更简洁。在更一致的编译器上,我认为std::function otherFunc={}
也应该可以。