QT/c++调用父级方法的最佳方法

QT / c++ best way to call a method of parent

本文关键字:方法 最佳 c++ 调用 QT      更新时间:2023-10-16

我需要使用类 A 中的方法(称为 write)控制文件 I/O。 然后,A 通过调用 A.write() 来触发另一个需要写入文件的类 B(不基于 A)。

实现这一目标的最佳方法是什么?

我应该将 Class.functionname (A.write) 作为参数传递给 B.sometfunction 进行回调吗?

我应该让 A.write 一个插槽,并允许 B 发出信号吗?

有没有更好的方法? (我正在使用带有C++的QT 5


好的,一些更多信息可以帮助解释:A 是线程的集合,每个线程都是一个 TcpSocket(来自客户端的控制台会话)B 是我的记录器类,是单例模式。A 线程有时必须将消息记录到文件中,B 使用互斥锁格式化并写入文件。这些相同的(格式化的)消息应写入控制台(每个 A 线程唯一的套接字,因此不能是静态方法)。所以A.something调用B.write(到文件),然后B.write需要调用A.write(到控制台)。

将 A.write() 公开并给出 A 到 B 的指针,或者使用信号/插槽连接,在 B 中只使用 emit mysignal(data); 连接到插槽 A.write()...

使用信号/插槽连接机制B信号write()连接到公共A插槽doWrite()。或者A::write()仅公开static方法,并从B调用它

void B::write() {
    A::write();
    //...
}

或者只是将指针或引用传递给类 B 的对象A,并通过此指针/引用调用公共方法。

void B::write(A& a) {
    a.write();
    //...
}

作为旁注,请重新考虑您的设计。我相信你自己确实觉得这里有些不对劲。通常,这是在执行该作业的A中创建的B实例(是A的成员)。

class A{
  B b;
  void write(){
    B.write();  // clear
  }
};

在你的方法中A创建一个对象,该对象回调父级来完成工作。

class A{
  B b;
  void foo(){
    B.write(
    // hey hey, I want A.write() come back!  -> confusing oOO
   );
  }
};