J'essaie de surcharger l'opérateur ostream pour autoriser la sortie d'une classe imbriquée dans un modèle. Cependant, le compilateur est incapable de lier l'appel de fonction réel à ma surcharge.Sortie d'une classe imbriquée dans un modèle
template <class T>
struct foo
{
struct bar { };
};
template <class T>
std::ostream& operator << (std::ostream& os,
const typename foo<T>::bar& b)
{
return os;
}
int main()
{
foo<int>::bar b;
std::cout << b << std::endl; // fails to compile
}
Cela compilera si je la surcharge en définir une fonction en ligne friend
:
template <class T>
struct foo
{
struct bar
{
friend std::ostream& operator << (std::ostream& os, const bar& b)
{
return os;
}
};
};
Mais je préfère définir la surcharge en dehors de la classe. Est-ce possible?
Voir http://stackoverflow.com/questions/4092237/c-nested-class-of-a-template-class –