1

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

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

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

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

有没有更好的办法?(我将 QT 5 与 C++ 一起使用)


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

4

2 回答 2

3

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

于 2013-10-01T11:03:25.940 回答
1

使用信号/槽连接机制将B信号连接write()到公共AdoWrite()。或者只制作A::write()公共static方法并从Bjust调用它

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

或者简单地将指针或引用传递A给您的类对象B并通过此指针/引用调用公共方法。

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

作为旁注,请重新考虑您的设计。我敢肯定,您自己确实觉得这里有些不对劲。通常,这是在完成工作的(是 的成员)中B创建的实例。AA

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
   );
  }
};
于 2013-10-01T11:13:31.163 回答