如何将成员函数作为函数指针传递?

lin*_*ida 4 c++

我想向工作类添加记录器函数,如何将成员函数作为函数指针传递?使用 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 类,这个类做一些串口工作,

我需要记录并显示发送和接收的数据...

Jam*_*lis 5

您可以使用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 库中获取它们。