[英]List (vector) of different structs
是否可能有某种不同结构的列表/数组/向量?
例如在MFC
有CObject
和CArray
但没有MFC:
我可以做些类似的事情
std::vector<void*> pVec;
{
MYSTRUCT m = new MYSTRUCT;
pArr.push_back(m);
// looks fine here
}
//what is in my vector now?
有什么可以应付的吗?
明显的首选方法是让std::vector<Base*>
处理多态类型。
如果确实确实存在完全不相关的类型(看起来确实如此),那么您可能正在寻找boost::any
或boost::variant
类型的橡皮擦:
std::vector< boost::variant<int, std::string> > vec;
vec.push_back( 21 );
vec.push_back( "hello " );
您所举的例子很危险。 您如何清理(即delete
)分配的内容? 它的类型已通过分配给void *
而被擦除,那么编译器如何知道要operator delete
?
您可以至少通过两种不同的方式安全地进行此操作:
virtual
析构函数的通用库中继承。 然后,您可以将std::unique_ptr
的std::vector
设为通用基数。 这具有可扩展的优点(您可以声明从公共库派生的新类型,然后将它们扔到容器中而无需修改容器),但缺点是需要转到免费存储区(为存储区分配内存)。 std::unique_ptr
指向)。 boost::variant
类的变量类型。 这不需要通用的基础,也不需要在免费存储区上进行分配,但是需要声明容器时声明所有可以存储在容器中的类型(即,它不像基于继承那样容易扩展)解)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.