我有这个最小的示例代码:
#include <functional>
#include <iostream>
#include <vector>
template<class ReadFileCallback>
void fileMgr_ReadWithCallback(std::string filename, ReadFileCallback callback) {
callback("OK");
}
void globalReadResult(std::string result) {
std::cout << "ReadResult in global function: result=" << result << std::endl;
}
class MyClass {
public:
MyClass() {};
~MyClass() {};
void Read() {
fileMgr_ReadWithCallback("file", globalReadResult);
//fileMgr_ReadWithCallback("file", this->ReadResult);
}
void ReadResult(std::string result) {
std::cout << "ReadResult in member function: result=" << result << std::endl;
}
};
int main()
{
MyClass c;
c.Read();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于回调函数,我想使用非静态类成员MyClass::ReadResult。在调用回调之前知道对象是否仍然有效(未破坏)也是很好的,因为否则我猜程序会失败。
我应该如何更改此代码才能将MyClass对象ReadResult用作回调?
你可以把它包装成一个 lambda:
class MyClass {
public:
MyClass() {};
~MyClass() {};
void Read() {
fileMgr_ReadWithCallback("file", [this](const std::string& result){ this->ReadResult(result); });
}
void ReadResult(std::string result) {
std::cout << "ReadResult in member function: result=" << result << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)