C++ 降级到多重继承未定义的行为?
我有多个计算单元,每个计算单元操作自己的数据,我有一些要求将所有这些数据合并到一个对象向量中。因此,我创建了以下模板:C++ 降级到多重继承未定义的行为?,c++,templates,inheritance,casting,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 Gro
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个参数时,事情开始变得奇怪。
对数据的计算显示了奇怪的结果,尽管所有输入看起来都很好,但它并不总是发生在不同的构建或优化级别上。
我正在Redhat5上使用g++4.1.2
如有任何意见,我们将不胜感激。如果我首先检查MyData*==NULL,则一切正常,且从不为NULL。