gpt4 book ai didi

void* 指针的 C++ 替代品(不是模板)

转载 作者:可可西里 更新时间:2023-11-01 18:02:38 25 4
gpt4 key购买 nike

看来我对 C++ 有一个根本性的误解:<

我喜欢多态容器解决方案。谢谢你让我注意到这一点:)


所以,我们就有了创建一个相对通用的容器类型对象的需求。也恰好封装了一些业务相关的逻辑。但是,我们需要在此容器中存储基本上任意的数据 - 从原始数据类型到复杂类的所有数据。

因此,人们会立即跳到模板类的想法并完成它。但是,我注意到 C++ 多态性和模板不能很好地协同工作。由于我们将不得不处理一些复杂的逻辑,所以我宁愿坚持使用模板或多态性,而不是试图通过让 C++ 两者都做来对抗 C++。

最后,鉴于我想做一个或另一个,我更喜欢多态性。我发现表示像“此容器包含可比较类型”这样的约束要容易得多 - la java。

让我回到问题的主题:在最抽象的情况下,我想我可以有一个“容器”纯虚拟接口(interface),它具有类似于“push(void* data) 和 pop(void* data)”的东西(郑重声明,我实际上并没有尝试实现堆栈)。

但是,我不太喜欢顶层的 void*,更不用说每次我想对具体容器可以使用的数据类型添加约束时签名都会更改。

总结:我们有相对复杂的容器,它们有多种检索元素的方法。我们希望能够改变对可以进入容器的元素的约束。元素应该适用于多种容器(只要它们满足特定容器的限制)。

编辑:我还应该提到容器本身需要是多态的。这是我不想使用模板化 C++ 的主要原因。

那么 - 我应该放弃对 Java 类型接口(interface)的热爱并使用模板吗?我应该使用 void* 并静态转换所有内容吗?或者我应该使用一个没有声明任何内容的空类定义“Element”并将其用作“Element”层次结构中的顶级类?

我喜欢堆栈溢出的原因之一是许多响应提供了一些我什至没有考虑过的其他方法的有趣见解。因此,提前感谢您的见解和评论。

最佳答案

你可以看看使用 boost::any 的标准容器如果您要将真正任意的数据存储到容器中。

这听起来更像是你宁愿拥有类似 boost::ptr_container 的东西可以存储在容器中的任何东西都必须派生自某种基本类型,而容器本身只能为您提供对基本类型的引用。

关于void* 指针的 C++ 替代品(不是模板),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/168408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com