我想向工作类添加记录器函数,如何将成员函数作为函数指针传递?使用 mem_fun 吗?
这是代码示例:
class Work{
public:
void (*logger) (const string &s);
void do_sth(){if (logger) logger("on log")};
};
classs P{
public:
void log(const string &s)(cout << s);
};
int main(){
Work w;
P p;
w.logger = &p.log;
w.do_sth();
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我不想使用 void (P::*xxx)() 因为它坚持类 P ...
我知道C++隐藏……,真正的日志函数是:void log(P &p, const string &s),
真正的项目是这样的:
我创建了一个 CDialog,并且有一个日志功能,它将日志字符串复制到 CEdit。
所以我需要把这个日志函数传递给一个 Worker 类,这个类做一些串口工作,
我需要记录并显示发送和接收的数据...
您可以使用std::functionand完成此操作std::bind:
#include <functional>
#include <iostream>
#include <string>
class Work {
public:
std::function<void(const std::string&)> logger;
void do_sth() { logger("on log"); }
};
class P {
public:
void log(const std::string& s) { std::cout << s; }
};
int main() {
Work w;
P p;
w.logger = std::bind(&P::log, p, std::placeholders::_1);
w.do_sth();
}
Run Code Online (Sandbox Code Playgroud)
请注意,function并bind可能不会在你的执行的标准库之中; 您也可以从 Boost 库中获取它们。