como passar uma função de membro como um ponteiro de função?

Quero adicionar uma função de logger a uma classe de trabalho, como passar uma função de membro como um ponteiro de função? usar mem_fun?

Aqui está o exemplo de código:

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();
}

editar:

Eu não quero usar o void (P :: * xxx) () porque ele adere à classe P ...

Eu sei que C ++ hide sth, a função real de log é: void log (P & p, const string & s),

e o projeto real é assim:

Eu crio um CDialog, e há uma função de log, ele copia a seqüência de log para um CEdit.

Então, eu preciso passar essa função de log para uma classe Worker, essa classe faz algum trabalho de porta serial,

Preciso logar e mostrar os dados enviados e recebidos ...

questionAnswers(3)

yourAnswerToTheQuestion