C++ 0x a modèle alias (parfois appelé modèle typedefs). Voir ici. Spec en cours de C++ ne prend pas.
Que faites-vous comme travail ? Contenant des objets ou des Macros ? Vous sentez-vous sa vaut le coup ?
C++ 0x a modèle alias (parfois appelé modèle typedefs). Voir ici. Spec en cours de C++ ne prend pas.
Que faites-vous comme travail ? Contenant des objets ou des Macros ? Vous sentez-vous sa vaut le coup ?
Que faites-vous comme travail ? Contenant des objets ou des Macros ? Vous sentez-vous sa vaut le coup ?
La manière canonique est d'utiliser un metafunction comme ainsi:
template <typename T> struct my_string_map { typedef std::map<std::string, T> type; }; // Invoke: my_string_map<int>::type my_str_int_map;
Il est également utilisé dans la STL (
allocator::rebind<U>
) et dans de nombreuses bibliothèques, notamment pour les Stimuler. Nous l'utilisons de manière intensive dans un bioinformatical de la bibliothèque.C'est gonflé, mais c'est la meilleure alternative 99% du temps. À l'aide de macros ici n'est pas la peine les nombreux inconvénients.
(EDIT: j'ai modifié le code afin de refléter Boost/STL conventions comme l'a souligné Daniel dans son commentaire.)
template <typename T> struct my_string_map : public std::map<std::string,T> { };
Vous ne devriez pas hériter de classes qui n'ont pas un destructeur virtuel. C'est lié à destructeurs dans les classes dérivées de ne pas être considéré, quand ils devraient être, et vous pourriez vous retrouver avec une mémoire non allouée.
Cela étant dit, vous pourriez **probablement** sortir avec elle dans l'exemple ci-dessus, car vous n'êtes pas ajouter plus de données à votre type dérivé. Notez que ce n'est pas une approbation. - Je encore vous conseiller de ne pas le faire. Le fait que vous pouvez le faire ne signifie pas que vous devriez.
EDIT: Oui, c'est une réponse à ShaChris23 post. J'ai sans doute raté quelque chose parce qu'il a montré jusqu'à au-dessus de son message à la place de ci-dessous.
Parfois, vous pouvez simplement écrire explicitement les untemplated typedefs pour tous les types nécessaires. Si la classe de base est basé sur un modèle sur plusieurs modèle args avec un seul type désiré être typedefed vous pouvez hériter d'une classe spécialisée avec typedef effectivement inclus dans la classe héritée nom. Cette approche est moins obstruse que le metafunction approche.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.