Bonjour à tous,
Tout est dans le titre. D'un côté, j'ai une classe d'interface :
De l'autre une classe pouvant l'implémenter, ayant une fonction template du même nom :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class my_interface { virtual void foo(int i) = 0; };
Comment faire pour que my_impl puisse implémenter my_interface ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class my_impl { template<typename T> void foo(T t) { //fait des choses avec t } };
Si je laisse comme ci-dessus, le compilateur me dit que foo(int) est virtuel pur, donc que my_impl ne peut être instancié.
J'ai donc pensé à créer une instanciation explicite de foo() pour le type int, mais j'ai toujours le même message :
le .h
le .cpp
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 class my_impl: public my_interface { template<typename T> void foo(T t); }; template<typename T> void my_impl::foo(T t) { // } //spécialisation template<> void my_impl::foo(int i);
Que faire pour arriver à mes fins ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //instanciation explicite template void my_impl::foo(int i);
Partager