[英]Composition and circular dependency
它看起来应该像这样:
template<
typename E>
class IOutPort{
public:
...
/**
* Takes an element (chosen by the implementation) that is in channel
*
* @return
* The element
*/
virtual E take() = 0;
};
template<
typename E>
class IChannel {
public:
...
/**
* Gives access to the out port of this channel
*
* @return
* A smart pointer to the channel's port
*/
virtual std::shared_ptr<IOutPort<E>> getOutPort() = 0;
};
他们俩都需要参考自己。
此外:
用weak_ptr破圈可能会导致通道过早损坏!
不合并两个接口的最佳模式是哪种?
编辑: @Edwin是的,我已经检查了现有的讨论...我在寻找的答案比技术上更符合道德...
实质上,当所组合的对象需要访问作曲家时,像C ++这样的缺乏语言的内存管理和构造时“ this”的可用性的优势是什么?
我的想法是,唯一的解决方案是在同一个类中实现组合器和(私有地)所有组件接口(以解决组件间的通信问题)。 也许可以提供该唯一同一类的特定视图,以使它们在“具有”关系中看起来像“是”关系……但是在这种情况下,所有组合优势都丧失了!
这个问题太抽象了,与应用程序分开了。 当您的频道中的内容发生变化(谁负责通过端口传播)时,会发生什么? 通过流协议而不是面向对象的API是否可以更好地为应用程序提供服务? 将有多少个通道与将有多少个端口侦听器?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.