gpt4 book ai didi

c++ - 组合和循环依赖

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:12 25 4
gpt4 key购买 nike

  • Channel 包含类型 E 的元素
  • channel 还一个端口,可以访问 channel 中的元素

它应该看起来像这样:

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;
};

他们都需要引用自己..
此外:

  • channel 实现无法在构建时向端口实现提供其自身的 shared_ptr(因为它尚未完成)
  • 如果两者都使用强引用,它们将永远不会被释放
  • 一些用户代码可能想要存储端口的指针供以后使用...所以那时 channel 必须仍然存在!

用 weak_ptr 打破圆圈可能会导致 channel 过早破坏!

在不合并两个接口(interface)的情况下,哪种模式是最好的?

编辑:@Edwin 是的,我已经检查了现有的讨论...我正在寻找的答案比技术更道德......

实质上,当组合对象需要访问组合器时,在构造时缺少内存管理和“this”可用性的 C++ 语言中组合的优势是什么?

我的想法是,唯一的解决方案是在同一类中实现 Composer 和(私下)所有组件接口(interface)(以解决组件到 Composer 的通信问题)。并且可能提供该独特的同一类的特定 View ,以显示“有”关系中的"is"关系......但在这种情况下,所有的组合优势都将丢失!

最佳答案

题目太抽象,脱离应用。当你在 channel 中的东西发生变化时会发生什么,谁负责通过端口传播?使用流协议(protocol)而不是面向对象的 API 会更好地为应用程序提供服务吗?将有多少 channel 与多少端口监听器?

关于c++ - 组合和循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423413/

25 4 0
文章推荐: html - CSS 图像动画适用于所有浏览器,但 safari
文章推荐: linux - WSO2 身份服务器作为 key 管理器 java.io.IOException : Too many open files
文章推荐: html -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com