Bonjour à tous,
Mon problème peut être résumé dans le code suivant :

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
 
#include <iostream>
#include <vector>
#include <list>
 
using namespace std;
 
template<class T> void foo(const T& t)
{
	cout << "Default" << endl;
};
 
template<class T> void foo(const vector<T>& v)
{
	cout << "Vector : " << v.size() << endl;
 
	for(uint i=0;i<v.size();i++)
	{
		foo(v[i]);
	}
};
 
template<typename T> void foo(const list<T>& v)
{
	cout << "List : " << v.size() << endl;
};
 
int main(int argc, char **argv)
{
	vector< list<double> > v(3);
	v[0] = list<double>(1);
	v[1] = list<double>(2);
	v[2] = list<double>(3);
 
	foo(v);
 
	return 0;
}
Ce code compile sous gcc 4.2.4 mais alors que je m'attendrais à ce qu'il me renvoie :

Vector : 3
List : 1
List : 2
List : 3
j'ai à la place :

Vector : 3
Default
Default
Default
Sauriez-vous comment corriger ce code pour obtenir le résultat attendu en exploitant au mieux les fonctions template ?? Faut-il abandonner les templates dans cette configuration ?

Merci pour votre aide.