2010-07-20 4 views
38

Je voudrais faire ce qui suit:modèle ami

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

private: 
    // ... 
}; 

mais mon compilateur (VC8) étranglements sur elle:

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

Je voudrais avoir toutes les instanciations possibles de template struct foo amis de foo<T> pour tous T.

Comment est-ce que je fais ce travail?

EDIT: Ce

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

private: 
    // ... 
}; 

semble compiler, mais est-il exact? Les amis et les modèles ont une syntaxe très artificielle.

Répondre

62
template<typename> friend class foo 

cela fera cependant de tous les modèles des amis les uns aux autres. Mais je pense que c'est ce que tu veux?

+0

merci cela fonctionne. Oui c'est ce que je veux. –

+4

pouvez-vous s'il vous plaît poster la section de référence à la norme où il est défini? –

+7

En C++ 03 en 14.5.3.3 et 14.5.3.4, en C++ 11 vous devez lire la section Amis en 14.5.4 –