J'ai trouvé "comment définir une fonction modèle d'ami d'une classe de modèle en dehors de sa déclaration" (SO/cppreference), mais comment faire si nous ajoutons une autre classe interne non modèle dans le mélange?Comment définir une fonction friend déclarée dans une classe non template interne à une classe template en dehors des deux classes?
I.e. comment (externe) définissent operator<<
déclaré dans class Internal
de l'exemple suivant:
#include <iostream>
template <typename T>
class External {
public:
explicit External(T initial) : value{initial} {}
class Internal {
public:
Internal(const External& e) : internal_value{e.value} {}
private:
friend std::ostream& operator<<(std::ostream& os, const Internal& i);
// ^^^ this one
/* body
{
return os << i.internal_value;
}
*/
T internal_value;
};
friend std::ostream& operator<<(std::ostream& os, const External& e)
{
return os << Internal{e};
}
private:
T value;
};
int main()
{
std::cout << External<int>{5};
}
@StoryTeller quelles sont les règles de recherche? –
@RichardHodges - Vous savez quoi, je n'en suis plus si sûr. Je pourrais être déroutant mes règles de recherche. C'est seulement la fonction d'ami en ligne de l'OP qui est seulement trouvée par ADL. – StoryTeller
Qui a voté pour que cela soit trop large ...? –