Je travaille sur un bout code ayant besoin de spécialiser un template suivant son nombre de paramètres. Il ne compile pas et il a la "forme" de ce code :
Messages de g++ :
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 // NE COMPILE PAS PAS #include <iostream> using namespace std; template< typename T = void, typename U = void > struct Dummy { void Hello(T t, U u); }; template< typename T, typename U > void Dummy< T, U >::Hello(T t, U u) { cout << t << " " << u << endl; } template< typename T > struct Dummy< T > { void Hello(T t); }; template< typename T > void Dummy< T >::Hello(T t) { cout << t << endl; } template< > struct Dummy< > { void Hello(); }; template< > void Dummy< >::Hello() { cout << "-" << endl; } int main(int argc, char** argv) { Dummy< int, double >().Hello(5,0.1); Dummy< int >().Hello(5); Dummy< >().Hello(); }
main.cpp:64: erreur: template-id `Hello<>' for `void Dummy<void, void>::Hello()' does not match any template declaration
main.cpp:64: erreur: déclaration de fonction invalide
Ces deux autres codes compilent néanmoins très bien.
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 // COMPILE... #include <iostream> using namespace std; template< typename T = void, typename U = void > struct Dummy { void Hello(T t, U u); }; template< typename T, typename U > void Dummy< T, U >::Hello(T t, U u) { cout << t << " " << u << endl; } template< typename T > struct Dummy< T > { void Hello(T t); }; template< typename T > void Dummy< T >::Hello(T t) { cout << t << endl; } int main(int argc, char** argv) { Dummy< int, double >().Hello(5,0.1); Dummy< int >().Hello(5); }Ou est l'erreur dans la spécialisation de Dummy sans paramètre de la première version ?
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 // COMPILE #include <iostream> using namespace std; template< typename T = void, typename U = void > struct Dummy { void Hello(T t, U u) { cout << t << " " << u << endl; } }; template< typename T > struct Dummy< T > { void Hello(T t) { cout << t << endl; } }; template< > struct Dummy< > { void Hello() { cout << "-" << endl; } }; int main(int argc, char** argv) { Dummy< int, double >().Hello(5,0.1); Dummy< int >().Hello(5); Dummy< >().Hello(); }
Merci d'avance
Partager