J'ai actuellement un modèle de fonction, en prenant une référence, qui fait quelque chose en substance équivalente à:Traitement des références dans les modèles de C
template <typename T>
void f(T& t)
{
t = T();
}
Maintenant, je peux appeler:
int a;
f(a);
Pour initialiser ma variable a. Je peux même faire:
std::vector<int> a(10);
f(a[5]);
Cependant, cela échouera:
std::vector<bool> a(10);
f(a[5]);
La raison d'être a[5]
retourne un objet en référence sémantique, mais pas une référence. Donc, je dois pouvoir écrire:
template <typename T>
void f(T a)
{
a = T();
}
Mais si j'ajoute ce nouveau modèle et essayer de compiler le premier exemple (avec int), j'obtiens l'erreur suivante:
test_multi_tmpl.cc: In function ‘int main()’:
test_multi_tmpl.cc:20: error: call of overloaded ‘f(int&)’ is ambiguous
test_multi_tmpl.cc:6: note: candidates are: void f(T&) [with T = int]
test_multi_tmpl.cc:12: note: void f(T) [with T = int]
Toutes les idées comment résoudre ceci? Je ne voudrais pas surcharger f
juste pour std::vector<bool>::reference
car cette construction pourrait apparaître dans d'autres endroits ...
'vecteur' peut fonctionner aussi. –
'vecteur' serait techniquement plus proche. –
La spécialisation 'std :: vector' est en effet déconseillée, mais pourquoi arrêter d'utiliser un vecteur de booléens? –