Bonjour,
Voici une petite routine que j'ai fini il y a pas longtemps, il vous faudra un compilateur compatible C++11 qui puisse gérer les variadics template, les threads natif, les type traits. J'utilise g++ 4.7.2 comme compilateur. À ma connaissance, pour MSVC, il faudra avoir MSVC 2012 avec la dernière mise à jour.
Pour l'utiliser, c'est simple:
Vous prenez une classe, vous la faites dériver de Singleton, le paramètre template est la classe elle-même, ensuite, si vous avez un constructeur par défaut sans comportement "spécial", utilisez la macro SINGLETON_DECLARE_DEFAULT_CONSTRUCTOR(LeNomDeLaClasse), si vous avez un constructeur par défaut avec comportement, utilisez la macro SINGLETON_DECLARE, si vous n'avez pas de constructeur par défaut, utilisez simplement SINGLETON_DECLARE_NO_DEFAULT_CONSTRUCTOR.
Enfin, utilisez la macro SINGLETON_POSSESS_DEFAULT_CONSTRUCTOR si votre classe possède un constructeur par défaut, sinon utilisez SINGLETON_UNPOSSESS_DEFAULT_CONSTRUCTOR, hors de la classe.
Un petit exemple:
Cette classe peut throw une exception runtime_error dans le cas où, vous faites appel à GetInstance() alors que la classe n'a pas de constructeur par défaut.
Hors ligne
merci pour la routine, je note juste:
-l'utilisation de friend n'est pas nécéssaire, les cas ou le constructeur ne soit pas public est plutot rare
-utiliser des macros je trouve pas ça très propre
+utiliser la nouvelle norme, bonne effort
bon après je peut toujours discuter des Singletons, mes c'est plus de l'opinion personnel
Hors ligne
Uhm, en faite, le constructeur n'est pas publique pour le simple fait que c'est un pattern Singleton ^^
Donc, c'est un peu normal
Si le constructeur est publique, on pourrait créer plus d'une instance, ça viole le pattern.
L'utilisation des macros, c'est pour simplifier l'utilisation, mais on peut s'en passer.
Hors ligne