朋友
我有一个包含指针的结构。不同的指针将连接到不同的数据类型。问题是我不知道当前结构将连接多少,以及这些数据结构将是什么。
例如,
struct root
{
branch1 *a;
branch2 *b;
branch3 *c;
/// ...
};
Branch1,2,3本身就是不同的结构。但我现在不知道有多少branch1,2,3我将连接根。因此,有没有办法动态地将额外的指针引入结构中,如果以后我知道root将连接多少?
让我更具体一点。 根是不同逻辑门之间的连线。 分支1,2,3实际上指向由该线驱动的门。 由于存在不同的门(不同数量的输入,不同的功能),我现在不知道线的扇出是什么。
---------------我目前的做法----------------------------- -----
在我按照某些朋友的建议去一些像vector这样的成熟数据结构之前,
目前我正在尝试使用一些固有的类和多态来实现。
所有导线都是基线固有的,但有不同的扇出
所有门都是基本门固有的,具有最大数量的输入,固有门使用其中一些来实现门功能
我还在努力。
答案 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;
};
答案 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)
以下是您需要继承解决方案的更详细解释: