c++ - 如何自定义 C++ 列表容器,使其可以容纳不同类型的结构?

标签 c++ c++11

如何自定义一个 C++ 列表容器,使其可以容纳不同类型的结构?

例如

struct A
{
  int a;
  int b;
}

struct B
{
  float a;
  float b;
}


#include <list>
using namespace std;
int main()
{
   ...
   ...
   A a;
   a.a = 1;
   a.b = 2;

   B b;
   b.a = 123.444;
   b.b = 11.222;

   List.push_back(a);
   List.push_back(b);

   return 0;
}

最佳答案

为什么不 polymorphism和指向对象的指针列表? 注意对象的生命周期。一旦这两个对象超出范围,列表中的指针将失效。您也可以选择 dynamically allocate (新建)这两个元素并在完成后删除它们,然后将它们从列表中移除。

稍后编辑:我觉得您是 C++ 的新手。学完动态分配,推荐你查查智能指针。他们通过自己来减轻手动管理内存的负担:

unique_ptrshared_ptr

您可以在列表中使用它们而不是裸指针。

struct Base
{
    virtual ~Base(){}
};
struct A : public Base
{
  int a;
  int b;
};

struct B : public Base
{
  float a;
  float b;
};


#include <list>
using namespace std;
int main()
{
   ...
   ...
   A a;
   a.a = 1;
   a.b = 2;

   B b;
   b.a = 123.444;
   b.b = 11.222;

   std::list<Base*> l;
   l.push_back(&a);
   l.push_back(&b);

   return 0;
}

关于c++ - 如何自定义 C++ 列表容器,使其可以容纳不同类型的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23723029/

相关文章:

c++ - 如何在 Eclipse 中使用 MinGW 编译 boost 线程?

c++ - 使用 do-while 从一个 vector 中删除元素并将它们添加到另一个 vector

c++ - 加倍加倍是否会导致0.0?如果没有,该如何实现?

c++ - Freetype 字形在加载到 openGL 时换行

c++ - (c++) 将 lambda 用作嵌套函数,甚至用作一般函数?

c++ - 创建分数矩阵

c++ - 为什么调试器总是在这个程序中跳过一行?

c++ - 对象创建时 SSE 访问冲突崩溃

c++ - 我如何在 Qt 中重写这行代码?

c++ - 根据模板类型在类中提供/启用方法