gpt4 book ai didi

c++ - 类设计调用另一个类的成员函数

转载 作者:行者123 更新时间:2023-11-30 05:03:25 28 4
gpt4 key购买 nike

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

例如,如果我有两个类 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;
}

最佳答案

您可以使用 pointer to member function .另外,引用在初始化时必须绑定(bind),绑定(bind)的对象不能改变,所以可以用指针代替。

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

关于c++ - 类设计调用另一个类的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49425281/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com