Ho molti modelli nel mio progetto, e alcune altre classi hanno solo bisogno della dichiarazione della classe e dell'aliasing del tipo di puntatore. Non è necessario conoscere la definizione della classe , quindi non voglio includere il file di intestazione del modello. Estraggo tutte le dichiarazioni del modello in un unico file per far sì che ogni classe faccia riferimento a un file.
model_forward.h
class Cat;
typedef std::shared_ptr<Cat> CatPointerType;
typedef std::shared_ptr<const Cat> CatConstPointerType;
class Dog;
typedef std::shared_ptr<Dog> DogPointerType;
typedef std::shared_ptr<const Dog> DogConstPointerType;
class Fish;
typedef std::shared_ptr<Fish> FishPointerType;
typedef std::shared_ptr<const Fish> FishConstPointerType;
enum CatType{RED_CAT, YELLOW_CAT, GREEN_CAT, PURPLE_CAT}
enum DogType{HATE_CAT_DOG, HUSKY, GOLDEN_RETRIEVER}
enum FishType{SHARK, OCTOPUS, SALMON}
È una pratica accettabile? Devo fare in modo che ogni unità, che ha bisogno di una dichiarazione di classe , dipenda da un file? Causa un alto accoppiamento?
O dovrei mettere questi pointer
di tipo aliasing e enum
definizione all'interno della classe?
cat.h
class Cat
{
typedef std::shared_ptr<Cat> PointerType;
typedef std::shared_ptr<const Cat> ConstPointerType;
enum Type{RED_CAT, YELLOW_CAT, GREEN_CAT, PURPLE_CAT}
...
};
dog.h
class Dog
{
typedef std::shared_ptr<Dog> PointerType;
typedef std::shared_ptr<const Dog> ConstPointerType;
enum Type{HATE_CAT_DOG, HUSKY, GOLDEN_RETRIEVER}
...
}
fish.h
class Fish
{ ... };
Qualsiasi suggerimento sarà utile.