Mi chiedo se il seguente uso di typedef sia una buona pratica o se ci siano degli svantaggi.
Fondamentalmente ho un sacco di "dati" -strutture, che sono destinati ad essere utilizzati in contenitori (globalmente unici), e tengono indici ad altri (globalmente unici) contenitori, il motivo è quello di mantenere l'accesso alla memoria localizzato. Piuttosto che avere i tipi di indice essere generico size_t ho pensato di nominarli come segue per chiarezza:
typdef uint32_t MeshID;
typedef Mat4 Transform;
typedef std::vector<Transform>::size_type TransformIndex;
struct AABB
{
AABB(const Vec3& center, const Vec3& extent);
typedef std::vector<ModelMesh>::size_type AABBIndex;
Vec3 mAABBCenter;
Vec3 mAABBExtent;
};
struct ModelMesh
{
ModelMesh(const MeshID meshID, const uint32_t aabbIndex, const uint32_t transformIndex);
typedef std::vector<ModelMesh>::size_type ModelMeshIndex;
const MeshID mMeshID;
const AABB::AABBIndex mAABBIndex;
const TransformIndex mTransformIndex;
};
struct ModelNode
{
ModelNode(const uint32_t aabbIndex, const uint32_t transformIndex);
typedef std::vector<ModelNode>::size_type ModelNodeIndex;
const ModelNodeIndex mNodeStartIndex;
const ModelNodeIndex mNodeEndIndex;
const ModelMesh::ModelMeshIndex mMeshStartIndex;
const ModelMesh::ModelMeshIndex mMeshEndIndex;
const AABB::AABBIndex mAABBIndex;
const TransformIndex mTransformIndex;
};
struct Model
{
Model(const std::string& name, const Mat4& initialTransform, const Vec3& minBounds, const Vec3& maxBounds, const MeshID meshID, MaterialPtr material);
Model(DX11Renderer& renderer, const JonsPackagePtr jonsPkg, const PackageModel& pkgModel, LoadMaterialFunc loadMaterialFunction);
~Model();
bool operator==(const Model& m);
bool operator==(const std::string& modelName);
const std::string mName;
const size_t mHashedID;
const ModelNode::ModelNodeIndex mRootNodeIndex;
};
La motivazione è tale che la relazione tra le strutture sia chiara. Il rovescio della medaglia è forse un sacco di definizioni? Troppo chiacchierone?
Nel complesso, questa è una buona pratica?