2010-07-20 12 views
38

Ich mag würde folgendes tun:Template Freund

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

private: 
    // ... 
}; 

aber mein Compiler (VC8) Drosseln auf sie:

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

Ich mag würde alle möglichen Umschreibungen template struct foo Freunde haben von foo<T> für alle T.

Wie mache ich das?

EDIT: Diese

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

private: 
    // ... 
}; 

scheint, zu kompilieren, aber ist es richtig? Freunde und Vorlagen haben eine sehr unnatürliche Syntax.

Antwort

62
template<typename> friend class foo 

Dies wird jedoch alle Vorlagen Freunde zueinander machen. Aber ich denke, das ist was du willst?

+0

danke das funktioniert. Ja, es ist was ich will. –

+4

können Sie den Referenzabschnitt zum Standard posten, wo er definiert ist? –

+7

In C++ 03 in 14.5.3.3 und 14.5.3.4, In C++ 11 müssen Sie den Abschnitt "Friends" in 14.5.4 lesen –

Verwandte Themen