43 votes

Est-ce une bonne pratique de toujours définir « value_type » lorsque nous définissons un modèle

template<typename T>
class Point
{
public:
    typedef T value_type;
    ...
};

J'ai vu le code ci-dessus dans le livre "C++ in a Nutshell" de Ray Lischner, pp176.

Questions :

  1. Est-ce une bonne pratique d'ajouter toujours la définition pour value_type ?
  2. Où cela défini value_type sera-t-il utilisé ?

Par exemple : Point<int>::value_type ?

10voto

eduffy Points 17061

C'est une bonne pratique pour écrire des fonctions qui fonctionnent sur des conteneurs. Par exemple, si j'ai écrit une fonction swap qui accepte un conteneur (modèle), et deux indices à échanger, alors je pourrais utiliser la définition value_type pour définir une variable temp.

 template<typename T>
 void swap(T &container, int i, int j) {
    typename T::value_type temp = container[i];
    container[i] = container[j];
    container[i] = temp;
 }

1voto

Ylisar Points 2892

Je dirais seulement si ça a du sens pour le type. J'ai rencontré des problèmes où value_type se met en travers de la route parce qu'un algorithme générique suppose à tort qu'il s'agit d'un conteneur d'une certaine sorte ( dans mon cas, je semble me rappeler que c'était un algorithme en boost qui supposait que shared_ptr était un conteneur multi-éléments en raison de la présence de value_type).

Prograide.com

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.

Powered by:

X