Bonjour � tous.
je poss�de une super classe A dont d�rive les classes B, C et D.
Je souhaite qu'une fonction de la classe Info m'affiche connu si l'objet qu'on lui passe est du type A ou d�riv� de A ou sinon inconnu.
Pour cela j'utilise donc la m�taprogrammation en m'inspirant de cette page de wikipedia .
Voici le code :
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
#include <iostream>
 
class A{};
class B : public A{};
class C : public A{};
class D : public A{};
 
template <class H, class SousListe> struct ListeType {};
struct ListeFin {};
 
template <class T> class Node;
 
// Spécialisation pour le type de fin de liste
// C'est la super-classe
template <> class Node< ListeFin > 
{
public:
 
    template <class Z> void getPath(const Z& z)
    {
             std::cout << " inconnu" << std::endl;
    }
};
 
template <class H,class SousListe> class Node< ListeType<H, SousListe> > : public Node<SousListe>
{
public:
        template <> void getPath(const H& h){             
        std::cout << "connu" << std::endl;
             }
};
 
/*
template <class H,class SousListe> template <> void Node< ListeType<H, SousListe> >::getPath(const H& h)
    {
             std::cout << " connu" << std::endl;
    }
*/
typedef ListeType<A, ListeType<B, ListeType<C, ListeType<D, ListeFin> > > > UneListeClasses;
 
int main()
{
        int i;
	A a;
	Node<UneListeClasses> node;
        node.getPath(a);
 
	B b;
	node.getPath(b);
 
	C c;
	node.getPath(c);
 
	return 0;
}
Avec ce code, j'obtient l'erreur
explicit specialization in non-namespace ‘class Node<ListeType<H, SousListe> >’ scope.
D'apres mes recherches, je n'ai pas le droit de specialiser dans la classe.
Je comment donc la fonction dans la classe et je cr�er ce qui est comment� dans le code.

Mais ca ne compile pas, l'erreur est:
essaimetaprog.cpp:35: error: invalid explicit specialization before ‘>’ token
essaimetaprog.cpp:35: error: enclosing class templates are not explicitly specialized
essaimetaprog.cpp:35: error: no member function ‘getPath’ declared in ‘Node<ListeType<H, SousListe> >’
Une id�e ?

Merci.