类设计以调用另一个类的成员函数

Class design to call member function of another class

本文关键字:成员 函数 另一个 调用      更新时间:2023-10-16

我正在尝试设计两个类,以便我可以从另一个类调用其他类的成员函数并传递字符串参数。

例如,如果我有两个类classAclassB. 我希望能够从Class::doSomething方法调用ClassB::ClassB_doit方法。

我试图通过ClassA registerCallback传递ClassB::classB_doit()方法并将其存储在对类 B 的引用中。

我已经在附加的代码中尝试过。 但是,我不确定如何实现这一目标。 有人可以指出我正确的方向吗?

#include <iostream>
#include <string>
class classB;
class classA {
public:
    classA ();
    ~classA ();
    void doSometing(std::string s) {
        x ();  // call member function in defined via registerCallback
    }
    void registerCallback(classB &t) {
        x = t;  // Store reference to member function
    }
private:
    classB & x;
};
class classB {
public:
    classB ();
    ~classB ();
    void classB_doit (std::string name) {
        std::cout << name << std::endl;
    }
};
int main(int argc, const char * argv[]) {
    classA A = classA();
    classB B = classB();
    A.registerCallback (B.classB_doit);
    A.doSometing("hello");   // Just to test call doSometing to force classB::classB_doit to be call
    return 0;
}

可以使用指向成员函数的指针。此外,引用必须在初始化期间绑定,并且不能更改它绑定到的对象,因此可以改用指针。

class classA {
public:
    classA ();
    ~classA ();
    void doSometing(std::string s) {
        (x->*p)(s);  
    }
    void registerCallback(classB &t, void (classB::* _p)(std::string)) {
        x = &t;  
        p = _p;
    }
private:
    classB* x; // pointer instead of reference
    void (classB::* p)(std::string); // store pointer to member function
};

您可以像这样注册对象和成员函数:

A.registerCallback (B, &classB::classB_doit);