downcast到多继承未定义的行为?

时间:2015-03-11 13:16:31

标签: c++ templates inheritance casting

我有多个计算单元,每个单元都运行自己的数据,我有一些要求将所有这些数据组合成一个对象向量。所以我创建了以下模板:

 template <class D1 = Dummy<1>, class D2 = Dummy<2>, class D3 = Dummy<3>, class D4 = Dummy<4>, class D5 = Dummy<5>, class D6 = Dummy<6> >
struct GroupData : public GenericType, D1, D2, D3, D4, D5, D6 {
        GroupData() : GenericType(), D1(), D2(), D3(), D4(), D5(), D6() {}

        template <class T>
        T& Get() {
                T* result = static_cast<T*>(this);
                if (!result) PLOGL("GroupData Bad cast!");
                return *(result);
        }
};

然后我有:

std::vector<GenericType*> dataSet;
typedef GroupData<C1, C2, C3, C4> MyData;
dataSet.push_back(new MyData);

当我需要访问它时:

C1& c1 = static_cast<MyData*>(dataSet[0])->Get<C1>();

我注意到,当我修改GroupData定义以获得11个参数时,事情开始变得奇怪。 数据计算显示奇怪的结果,虽然所有输入似乎都很好,但它并不总是发生在不同的构建或优化级别。 我在redhat 5上使用g ++ 4.1.2。

任何意见都将不胜感激。

0 个答案:

没有答案