Bonjour à tous.
Je pense que le titre parle de lui même (), voici donc le code:
J'ai l'erreur suivante
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 #include <vector> #include <iostream> class Foo{ public: template<typename T> static T plop(T val) { return val; } template <class T, template <typename,typename=std::allocator<T> > class C> static C<T> plop(const C<T>& val) { std::cout<<"template conteneur"<<std::endl; return std::vector<T>(1, val[1]); } }; //Plante template <class T> std::vector<T> Foo::plop(const std::vector<T>& val) { return std::vector<T>(1, val[1]); } template <> int Foo::plop(int val) { return val*10; } int main(int argc, char const *argv[]) { std::cout<<Foo::plop(std::vector<std::string>(3,"Hi world"))[0]<<std::endl; std::cout<<Foo::plop("hello")<<std::endl; std::cout<<Foo::plop(42)<<std::endl; return 0; }A la vue de la première ligne, j'ai l'impression qu'il prend la ligne qui plante comme la définition d'une nouvelle fonction et non comme la spécialisation d'une fonction déjà existante. Une idée de comment résoudre ca ?b.cpp:53: erreur: prototype for ‘std::vector<T, std::allocator<_Tp1> > Foo::plop(const std::vector<T, std::allocator<_Tp1> >&)’ does not match any in class ‘Foo’
b.cpp:47: erreur: candidates are: template<class T, template<class, class> class C> static C<T, std::allocator<_Tp1> > Foo::plop(const C<T, std::allocator<_Tp1> >&)
b.cpp:43: erreur: template<class T> static T Foo::plop(T)
Je souhaiterai garder les fonctions membres templates pour garder la déduction automatique du type (même si on peut contourner ce problème avec une fonction membre libre qui est là la base d'une autre solution)
Merci beaucoup.
Partager