从基类型向量中获取派生成员

说我有这样的情况:
class Vertex
{
public:
    Position position;
    Normal   normal;
    Texcoord texcoord;
    int      boneID;
};

class VertexSkinned: public Vertex
{
public:
    float boneWeights[3];
    int   boneIDs[3];
};

class VertexMorphed: public Vertex
{
public:
    Position posTargets[3];
    Normal   normTargets[3];
    Texcoord texcoordTargets[3];
};

std::vector<Vertex> vertices;

VertexSkinned vs;
VertexMorphed vm;
Vertex        v;

vertices.push_back( vs );
vertices.push_back( vm );
vertices.push_back( v );

// This is illegal right? But how would I go about achieving the desired effect
float someFloat = vertices.front().boneWeights[2];
问题出在评论中。我很少使用继承,并认为我可能在这里找到了有益的用途,尽管它似乎不可能。 我假设使用指针向量然后动态转换为派生类工作?这不是我想要做的。     
已邀请:
除了存储指针和后来的dynamic_cast以获取派生对象之外,我没有看到任何其他选项。如果你想做类似的事情,你不能拥有3个不同的向量,每个向量都有自己的类型。在这种情况下,不需要指针业务。     
你有一个切片问题。 sizeof(VertexSkinned)和sizeof(VertexMorphed)与sizeof(Vertex)不相等,无法插入数组中。请改用指针 要访问派生类的成员,首先必须确定指定的项是否为派生类型。一个选项是在Base中添加GetType函数或使用dynamic_cast     
当你有一个顶点数组时,我认为数组中的所有顶点都是相同的类型,这意味着存储指针并执行
dynamic_cast
是浪费时间。如果你知道阵列中的每个顶点都是保证的,那就说
VertexSkinned
,你也应该能够使用更快的
static_cast
。 存储指向各个顶点的指针可能对性能不利,因为它们不会存储在一个连续的内存块中。     

要回复问题请先登录注册