Bonne pratique des templates - Container
Bonjour à tous,
J'ai tenté de faire une classe Container, de style banque de données, qui reprends ce que fait un peu std::map. Enfin clairement, c'est juste une classe qui est au dessus de std::map et qui offre moins de fonctionnalités.
Au début, j'avais écris mon template comme ça :
Code:
typedef std::map<std::string, const T*> StringBank;
Mais là, je viens d'avoir besoin de la même classe, mais sans que les données soient constantes.
Du coup, la question que je mettais posée lors de la création de ma classe est : est ce qu'il est bon de rajouter const T* alors que l'on pourrait laisser l'utilisateur choisir ?
De plus, l'utilisateur n'est pas obliger de savoir que cela va être const, puis que cela sera un pointeur, du coup, n'est ce pas dangereux de lui cacher de telle chose (un peu comme certain typedef de structure que je voyais en cours, qui cacher les pointeurs ...).
Quel est votre avis ?
Ne pas réinventer la roue
La librairie standard C++11 (<type_traits>) fournit tous les outils nécessaires pour cela.
Il suffit de rajouter un/des paramètre(s) template bool (pourquoi pas avec une valeur par défaut) puis d'agir en conséquence.
un exemple :
Code:
1 2 3 4 5 6
|
template <class T, bool constptr = true>
struct A
{
typedef std::map<std::string, std::conditional<constptr, const T, T>::type*> StringBank;
}; |