Je suis à la recherche d'une solution de problème de conception de classe C++. Ce que j'essaye de réaliser est d'avoir la méthode de méthode statique dans la classe de base, qui retournerait des instances d'objets de types descendants. Le fait est que certains d'entre eux devraient être des singletons. Je l'écris en VCL donc il est possible d'utiliser __properties
, mais je préfère les solutions C++ pures.Comment déclarer la méthode de type usine dans la classe de base?
class Base {
private:
static Base *Instance;
public:
static Base *New(void);
virtual bool isSingleton(void) = 0;
}
Base::Instance = NULL;
class First : public Base { // singleton descendant
public:
bool isSingleton(void) { return true; }
}
class Second : public Base { // normal descendant
public:
bool isSingleton(void) { return false; }
}
Base *Base::New(void) {
if (isSingleton())
if (Instance != NULL)
return Instance = new /* descendant constructor */;
else
return Instance;
else
return new /* descendant constructor */;
}
problèmes qui se posent:
- comment déclarer la variable
Instance
statique, donc il serait statique dans les classes descendantes - comment appeler les constructeurs de descendants en classe de base
Je pense il pourrait être impossible de surmonter ces problèmes comme je l'avais prévu. Si oui, je voudrais un conseil sur la façon de le résoudre d'une autre manière.
Modifier: quelques modifications mineures dans le code. J'ai manqué quelques marques de pointeur dedans.
vous voulez dire 'Instance == NULL'? – rriemann