tipos tipo sintaxis programacion programa plantillas orientada objetos matrices funciones estructuras estructura definir campos anidadas c++ templates friend

c++ - tipo - ¿Cómo declarar una estructura/clase con plantilla como un amigo?



plantillas programacion orientada a objetos (1)

template<typename> friend class foo

sin embargo, esto hará que todas las plantillas se relacionen entre sí. Pero creo que esto es lo que quieres?

Me gustaría hacer lo siguiente:

template <typename T> struct foo { template <typename S> friend struct foo<S>; private: // ... };

pero mi compilador (VC8) se ahoga:

error C3857: ''foo<T>'': multiple template parameter lists are not allowed

Me gustaría tener todas las instancias posibles de la template struct foo friends de foo<T> para todos los T

¿Cómo hago que esto funcione?

Edita esto

template <typename T> struct foo { template <typename> friend struct foo; private: // ... };

parece compilar, pero ¿es correcto? Los amigos y las plantillas tienen una sintaxis muy poco natural.