Bonjour à tous,

Tout est dans le titre. D'un côté, j'ai une classe d'interface :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
class my_interface
{
    virtual void foo(int i) = 0;
};
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
5
6
7
8
class my_impl
{
    template<typename T>
    void foo(T t)
    {
        //fait des choses avec t
    }
};
Comment faire pour que my_impl puisse implémenter my_interface ?
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
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);
le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
//instanciation explicite
template
void my_impl::foo(int i);
Que faire pour arriver à mes fins ?