【发布时间】:2013-06-21 04:01:17
【问题描述】:
如何在 std::vector 中存储多个 shared_ptr,每个都带有指向不同类型的指针?
std::vector < ? > vec;
vec.push_back( make_shared<int>(3));
vec.push_back( make_shared<float>(3.14f));
是否有一个基本的多态类可以用于该任务而无需使用特定于编译器的东西?
【问题讨论】:
-
您打算如何以这种方式获取存储类的类型?如果没有共享基类(我习惯于这样做),如果将浮点数和整数混合在一起,您将无法分辨存储的内容。更多关于您要完成的工作的背景知识会有所帮助,因为将这些视为共享指针也让我有些摸不着头脑。
-
你能解释一下为什么需要这个吗?
-
vector不需要知道类型,它只是一个放置“资源”的地方。我至少需要 1 个 shared_ptr 才能使资源保持活力,因此矢量就在这里。由于有几种类型的资源,我必须使用几种不同的 shared_ptr...顺便说一下,我刚刚通过解决方法解决了这个问题。
-
只是为了多样化,一个非增强的解决方案是使用可变参数模板,en.wikipedia.org/wiki/Variadic_template,这是 C++11 的一个特性
-
@DarioOO:
std::vector本身并不是为此而设计的。它被设计为T的容器。因此,您要么需要寻找std::vector的替代品,要么将您的问题完全减少到T。
标签: c++ templates vector shared-ptr polymorphism