我需要使用A类中的方法(称为write)来控制文件I / O.然后通过调用A.write()来实现需要写入文件的另一个类B(不基于A)
实现这一目标的最佳方法是什么?
我应该将Class.functionname(A.write)作为参数传递给B.sometfunction进行回调吗?
我应该将A.write设为一个插槽,并允许B发出信号吗?
有更好的方法吗? (我正在使用QT 5和C ++)
好的,还有一些信息可以帮助解释: A是一组线程,每个都是TcpSocket(来自客户端的控制台会话) B是我的记录器类,是单例模式。 线程有时必须将消息记录到文件中,B使用互斥锁格式化并写入文件。 应将这些相同(格式化)的消息写入控制台(每个A线程的唯一套接字,因此不能是静态方法)。 所以A.something调用B.write(到文件),然后B.write需要调用A.write(到控制台)。
答案 0 :(得分:3)
使A.write()公开并给出A到B的指针或使用信号/槽连接,而在B中只使用emit mysignal(data);它连接到插槽A.write()...
答案 1 :(得分:1)
使用信号/插槽连接机制将B
信号write()
连接到公共A
广告位doWrite()
。或者,只需公开A::write()
方法static
,然后从B
void B::write() {
A::write();
//...
}
或者只是将A
的指针或引用传递给类B
的对象,并通过此指针/引用调用公共方法。
void B::write(A& a) {
a.write();
//...
}
作为旁注,请重新考虑您的设计。我相信你确实觉得这里有些不对劲。通常,这是在B
(是A
的成员)中创建的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
);
}
};