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 :

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;
};
//...
Ou, plus généralement, en c++0x :

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);
};
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).

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.