如何解决特定的循环依赖关系
How to solve a specific circular dependency?
所以我的问题不在于代码,而在于实现代码的方法。我正在开发一个GUI,我想让我的按钮知道谁是家长。当然,窗口知道它有哪些按钮。
这创建了一个循环依赖,因为两者都需要能够访问其他方法和属性,至少我更喜欢这样。
我找到了一个有效的解决方案,但我对此不太满意:
我创建了第三个对象,按钮向其写入,它希望窗口执行什么操作。窗口检查第三个目标的命令。
我想问你,如果你知道更好的方法,因为我找不到任何其他方法,这对我有效。
谢谢!
我建议创建一个窗口界面。在按钮的构造函数中提供一个指向窗口接口的返回指针。拥有按钮的窗口取决于按钮,按钮取决于窗口界面。没有循环依赖关系。
struct IWindow {
};
struct Button {
IWindow* window_;
Button(IWindow* window) : window_(window){}
};
struct WindowWithButton : IWindow {
Button button_;
WindowWithButton() : button_(this) {}
};
然后在IWindow
中添加由WindowWithButton
实现的虚拟方法,使Button
可以从WindowWithButton
中获得所需的信息。
这是一种标准模式:
struct Window; // Forward-declare the parent
struct Button {
void pingParent(); // Only declare members which need
// more than superficial knowledge of Window
Window* parent; // Ok, we know there is a Window, somewhere
};
struct Window {
unique_ptr<Button> child;
// Other functions using the button
void pingpong() {child->pingParent();}
void ping(){}
};
/*optional inline*/ void Button::pingParent() {
parent->ping();
}
相关文章:
- C++GTKMM gui循环依赖关系
- 如何在头文件中声明类模板(由于循环依赖关系)
- 如何在具有循环依赖的类中dynamic_cast?
- C++模板方法中的循环依赖关系
- 修复循环依赖项 c++17 标头
- 涉及全局对象的循环依赖C++
- 循环依赖,在继承类的情况下使用覆盖方法
- Wt::D bo 中的循环依赖关系
- 在包含窗口标头时难以解决循环依赖关系问题
- 解决循环依赖关系 c++ 的想法
- C++循环依赖关系,未声明的标识符
- C++ 中的循环依赖关系问题
- 错误 C2512 视觉C++(并且不是循环依赖项)
- CMake 外部和内部静态库的循环依赖关系
- 正在从继承中解析循环依赖项
- "std::shared_ptr"循环依赖关系是如何导致问题的
- 纯引用而不是weak_ptr来打破循环依赖关系
- "invalid use of incomplete type" .解决循环依赖关系
- 如何避免模板方法的循环依赖
- 循环依赖结构,使用前向声明时结构的错误重定义