struct中的动态指针数

时间:2012-07-21 19:10:00

标签: c++ dynamic struct

朋友

我有一个包含指针的结构。不同的指针将连接到不同的数据类型。问题是我不知道当前结构将连接多少,以及这些数据结构将是什么。

例如,

struct root
{
  branch1 *a;
  branch2 *b;
  branch3 *c;
  /// ...
};

Branch1,2,3本身就是不同的结构。但我现在不知道有多少branch1,2,3我将连接根。因此,有没有办法动态地将额外的指针引入结构中,如果以后我知道root将连接多少?

让我更具体一点。 根是不同逻辑门之间的连线。 分支1,2,3实际上指向由该线驱动的门。 由于存在不同的门(不同数量的输入,不同的功能),我现在不知道线的扇出是什么。

---------------我目前的做法----------------------------- -----

在我按照某些朋友的建议去一些像vector这样的成熟数据结构之前,

目前我正在尝试使用一些固有的类和多态来实现。

所有导线都是基线固有的,但有不同的扇出

所有门都是基本门固有的,具有最大数量的输入,固有门使用其中一些来实现门功能

我还在努力。

5 个答案:

答案 0 :(得分:3)

看看这个http://www.parashift.com/c++-faq/heterogeneous-list.html 归结为例如std::vector<boost::shared_ptr<BranchBase>>

答案 1 :(得分:1)

您始终可以使用继承和向量。

实施例

struct Branch{

}

struct Branch1 : public Branch{

}

struct root{

  vector<branch*> branches;
};

More on this here

答案 2 :(得分:0)

创建一个名为Branch的类。使所有其他类派生自Branch,如Branch1,Branch2,..

在你的结构中,按如下方式创建一个指向Branch的数组或指针:

struct root{

    vector<branch *>branches;

...... };

答案 3 :(得分:0)

您应该为所有不同的分支类型使用基类(或java术语中的接口),并在可以动态增长的数据结构中存储指向它的指针(C ++ STL中的列表或向量更简单)。

class BaseBranch
{
...
};

class Branch1 : public BaseBranch
{
...
};

using namespace std;
list<BaseBranch*>mybranches;

如果你需要按位置访问元素而不是总是从列表的第一个元素开始,我建议std :: vector

using namespace std;
vector<BaseBranch*>mybranches;

编辑:修正了一个拼写错误 - 感谢Linuxios

答案 4 :(得分:0)

以下是您需要继承解决方案的更详细解释:

  1. 生成的C ++代码生成asm代码具有大量编译时偏移量常量,可以从内存中查找c ++程序中的数据。
  2. C ++具有称为sizeof(T)的重要特性。每种类型都支持它,它记录了c ++类型的行为。它的返回值是编译时常量,它不能在运行时更改。
  3. sizeof(root)显然具有相同的限制。与您的结构一样,每个c ++类型的行为方式都相同。
  4. 超越限制的唯一方法是通过新版本的阵列版本。它超过了c ++类型系统,结果是一个指针,而不是包含所有数据的类型。
  5. std :: vector通过保留两个独立的内存区域来解决问题。实际数据再次不在c ++类型中。
  6. 因此,执行运行时变量数据的唯一方法是在运行时从一种类型跳转到另一种类型。如果你只有一种类型,那就还不够。
  7. 具有基类和可能的虚函数的继承解决方案是一种从一种类型跳转到另一种类型的方法。还有其他方法可以做同样的跳跃。