2010-07-20 8 views
38

me gustaría hacer lo siguiente:Plantilla amigo

template <typename T> 
struct foo 
{ 
    template <typename S> 
    friend struct foo<S>; 

private: 
    // ... 
}; 

pero mi compilador (VC8) se ahoga en él:

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

me gustaría tener todas las posibles instancias de template struct foo amigos de foo<T> para todos T.

¿Cómo hago esto?

EDIT: Este

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.

Respuesta

62
template<typename> friend class foo 

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

+0

gracias que funciona. Sí, es lo que quiero. –

+4

¿puede por favor publicar la sección de referencia en el estándar donde está definido? –

+7

En C++ 03 en 14.5.3.3 y 14.5.3.4, en C++ 11 necesita leer la sección Amigos en 14.5.4 –

Cuestiones relacionadas