繁体   English   中英

不同结构的列表(向量)

[英]List (vector) of different structs

是否可能有某种不同结构的列表/数组/向量?

例如在MFCCObjectCArray但没有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::anyboost::variant类型的橡皮擦:

std::vector< boost::variant<int, std::string> > vec;
vec.push_back( 21 );
vec.push_back( "hello " );

您所举的例子很危险。 您如何清理(即delete )分配的内容? 它的类型已通过分配给void *而被擦除,那么编译器如何知道要operator delete

您可以至少通过两种不同的方式安全地进行此操作:

  • 所有对象都可以从具有virtual析构函数的通用库中继承。 然后,您可以将std::unique_ptrstd::vector设为通用基数。 这具有可扩展的优点(您可以声明从公共库派生的新类型,然后将它们扔到容器中而无需修改容器),但缺点是需要转到免费存储区(为存储区分配内存)。 std::unique_ptr指向)。
  • 您可以使用boost::variant类的变量类型。 这不需要通用的基础,也不需要在免费存储区上进行分配,但是需要声明容器时声明所有可以存储在容器中的类型(即,它不像基于继承那样容易扩展)解)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM