因此,情况如下:基本上有一个MainControl
,它有一个调度程序并调用一些函数。但是,调度程序必须通过MainControl
调用Monitor
中的某些函数,例如MainControl
类。同样,Monitor
类应该能够通过Dispatcher
从MainControl
访问函数。
问题是我应该像在this
中那样使用智能指针传递dispatcher.Init
指针,还是在monitor.Init()
中使用C风格的指针传递指针。还是有另一种更好的方法。明确地说,我知道也可以使用c样式引用传递this
指针。
Class MainControl : public std::enable_shared_from_this<MainControl>
{
public:
void Init()
{
dispatched.Init(shared_from_this());
monitor.Init(this);
};
Dispatcher &GetDispatcher() { return dispatcher;}
Monitor &GetMonitor() { return monitor;}
void DoSomeThing();
protected:
Dispatcher dispatcher;
Monitor monitor;
};
class Dispatcher
{
public:
void Init(shared_ptr<MainControl> ctrl)
{
mainCtrl = ctrl;
};
void DoSomethingFromMainController()
{
mainCtrl->DoSomething();
mainCtrl->GetMonitor().DoSomething();
};
void DoSomethingElse();
protected:
shared_ptr<MainControl> mainCtrl;
};
class Monitor
{
public:
void Init(MainControl *ctrl)
{
mainCtrl = ctrl;
}
void DoSomethingFromDispatcher()
{
mainCtrl->GetDispatcher().DoSomethingElse();
}
void DoSomething();
protected:
MainControl *mainCtrl;
};
答案 0 :(得分:1)
还有其他方法,例如根本不引用父级:
[0, 1, 2, 3, 5, 6, 7, 8, 9]