c++ - c-style this 或 shared_from_this 作为函数参数
问题描述
所以场景如下:基本上有一个MainControl
,它有一个调度程序并调用一些函数。但是,调度程序MainControl
必须Monitor
通过MainControl
. 此外,Monitor
该类应该能够Dispatcher
通过MainControl
.
问题是我应该像 inthis
那样使用智能指针传递指针,dispatcher.Init
还是像 in 那样使用 C 样式指针传递指针monitor.Init()
。或者有没有其他更好的方法。需要明确的是,我知道也可以this
使用 c 样式引用传递指针。
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;
};
解决方案
还有其他方法,例如,根本没有对父级的引用:
class MainControl
{
public:
void DoDispatcherWork() { dispatcher.DoSomethingFromMainController(*this, monitor);}
void DoMonitorWork() { monitor.DoSomethingFromDispatcher(dispatcher); }
void DoSomeThing();
protected:
Dispatcher dispatcher;
Monitor monitor;
};
class Dispatcher
{
public:
void DoSomethingFromMainController(MainControl& mainCtrl, Monitor& monitor)
{
mainCtrl.DoSomething();
monitor.DoSomething();
};
void DoSomethingElse();
};
class Monitor
{
public:
void DoSomethingFromDispatcher(Dispatcher& dispatcher)
{
dispatcher.DoSomethingElse();
}
void DoSomething();
};
推荐阅读
- javascript - 如何在 React js 的功能组件中在地图内进行条件渲染
- salesforce-marketing-cloud - 您可以将 ampscript 添加到 Einstein Contest Selection SFMC 2.0 中的资产 URL 吗?
- php - PHP中SessionHandlerInterface方法的返回值
- numpy - 如何让程序从数据集中调用图片
- svg - 在另一条 svg 线的中间添加双线
- data-structures - 选择一个好的哈希表长度证明(为什么是素数)
- javascript - 我能否识别出调整大小的 div 已溢出并将不再可见的内容放置在 DOM 上的其他位置或 JS 变量中?
- javascript - 使用 useContext 和键反应生产构建失败
- javascript - 如何更快地将图像从 unsplash 加载到网页作为背景图像?
- database - 无法显示数据库中的图像