我有指针的容纳结构大量(如,几百)。每个指针都是不同的类型,但它们都从一个通用的基类继承而来 - 我们称之为Base。我正在使用多重继承。 (这是所有机器产生的,这就是为什么它的怪异。)C++:处理结构成员作为数组
例如为:
class Data {
Class1* p1;
Class2* p2;
Class3* p3;
...etc...
};
我想打电话给在基地上定义所有这些方法。我可以生成这样的代码:
void callFooOnData(Data* p)
{
if (p1) p1->Foo();
if (p2) p2->Foo();
if (p3) p3->Foo();
...etc...
}
的问题是,我有很多和很多的这些,一个十亿不同种类的数据,并在上面的代码最终被非常大,影响到我的足迹。所以我试图用更聪明的东西取代它。
在C,我可以简单地采取的第一个结构部件和计数的地址,这样做:
void callFooOnData(Data* p)
{
callFooOnObjects(&p1, 3);
}
但是,当然,我不能做这在C++,因为结构成员都没有一个统一的类型,并把它们铸造基地*可能涉及到更改它们,这可能涉及更改指针,因为他们没有一个统一的类型,指针会为每个成员进行不同的变化,我不能那样做。
有没有办法做这样的事情,这是C++?这是所有机器生成的代码,所以它不必非常漂亮,幸运的是---鲨鱼已经被跳过了---但我确实需要它尽可能便携......
(I有机会获得RTTI,但想如果可能的话,以避免由于性能原因)
更新:
所以,据我可以告诉...你就不能在做这个C++。根本无法完成。我被一个事实,即它是完全简单的C.在C++中,你可以在一个类层次结构只有安全将指针两种类型之间,如果你有一个良好类型的指针开始,当然,我没有误导。
所以我将不得不改变底层的问题,以避免这种情况:我提出的解决方案是将每个指针存储在结构中两次,一次存储在一个Base *数组中,用于迭代,以及一次作为ClassWhatever *用于调用方法。当然,这太糟糕了,因为它会增加数据结构的大小。
所以,如果有人想证实这一点(我喜欢被证明是错误的),我会高兴地纪念他们的答案是正确的......
是否可以将所有指针设置为基本指针,还是有时必须调用仅为某些派生类型定义的方法?后者是 – 2012-07-08 18:28:40
。每个成员都需要是适当的类型。 – 2012-07-08 19:07:59