看来我对 C++ 有一个根本的误解:<
我喜欢多态容器解决方案。谢谢你,让我注意到这一点:)
所以,我们需要创建一个相对通用的容器类型对象。它也恰好封装了一些业务相关的逻辑。然而,我们需要在这个容器中存储基本上任意的数据——从原始数据类型到复杂类的所有内容。
因此,人们会立即跳到模板类的想法并完成它。但是,我注意到 C++ 多态性和模板不能很好地协同工作。由于有一些复杂的逻辑我们将不得不工作,我宁愿只使用模板或多态性,而不是试图通过使其两者兼而有之来对抗 C++。
最后,鉴于我想做一个或另一个,我更喜欢多态性。我发现表示“这个容器包含 Comparable 类型”之类的约束要容易得多 - 一个 la java.lang.
把我带到问题的话题:最抽象的,我想我可以有一个“容器”纯虚拟接口,类似于“push(void * data)和pop(void * data)”(记录在案) ,我实际上并没有尝试实现堆栈)。
但是,我真的不喜欢顶层的 void*,更不用说每次我想为具体容器可以使用的数据类型添加约束时签名都会发生变化。
总结:我们有相对复杂的容器,有各种方法来检索元素。我们希望能够改变对可以进入容器的元素的约束。元素应该与多种容器一起使用(只要它们满足特定容器的约束)。
编辑:我还应该提到容器本身需要是多态的。这是我不想使用模板化 C++ 的主要原因。
那么 - 我应该放弃对 Java 类型接口的热爱并使用模板吗?我应该使用 void* 并静态转换所有内容吗?或者我应该使用一个空的类定义“元素”,它什么都不声明,并将其用作“元素”层次结构中的顶级类?
我喜欢堆栈溢出的原因之一是,许多回复提供了一些我从未考虑过的其他方法的有趣见解。因此,提前感谢您的见解和评论。