a)
Créer un type TypeList<T,U> dans lequel figurent
deux définitions de types : head égal à
T
et tail égal à U.
On utilisera un type NullType pour marquer la fin de la liste.
Ainsi TypeList<int, TypeList<double, NullType> >
représente la liste [int; double].
b) Créer une classe template GetType paramétrée par une liste de types L et un entier positif N de sorte que GetType<L,N>::type est le type d'indice N de la liste L.
a) Écrire une méthode template at dans la classe template Nuple, paramétrée par un entier positif K, sans argument et qui permet d'accéder à la K-ième valur de la liste. On pourra écrire:
typedef TypeList<int, TypeList<double, NullType> > liste_t; Nuple<liste_t> u; u.at<0>() = 3.4; u.at<1>() = 4.5; std::cout << u.at<0>() << ' ' << u.at<1>() << std::endl; // affiche "3 4.5"
b) Faire en sorte que l'on puisse spécifier les valeurs d'un N-uplet avec la syntaxe suivante :
u << 3.4 << 4.5;