Bonjour à tous.
J'ai un doute si ce que je veux faire est possible.
Mon problème est que si on a :
template<typename T>
class Truc;
Alors, Truc n'est pas considéré comme un type.
Voici mon objectif :
Ou, plus généralement, en c++0x :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 template<typename T> struct NbTemplate { static const int value=0; }; template<template<class>class T> struct NbTemplate<T> { static const int value=1; }; template<template<class,class>class T> struct NbTemplate<T> { static const int value=2; }; //...
Malheureusement, ce code ne compile pas car T n'est pas un type (ce qui fait qu'il n'y a aucune utilité à la classe NbTemplate et ce qui l'empêche de compiler).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template<template<typename ...Args>class T> struct NbTemplate<T> { static const int value=sizeof...(Args); };
L'objectif final était d'écrire une matrice de taille connue à la compilation et qui pouvait donc prendre 2 types d'allocateurs (1 avec juste T, l'autre avec T et le nombre d'octets à allouer) sans dupliquer le code :
J'aurais fait :
template<typename T, unsigned Width, unsigned Height, class Allocator>
class Matrix;
et dedans, j'aurais fait un branchement si Allocator prend un ou deux template.
Si vous connaissez une solution.
Merci.
Partager