Heim >Backend-Entwicklung >C++ >Wie deklariere ich eine vorlagenbasierte Struktur oder Klasse als Freund in C?

Wie deklariere ich eine vorlagenbasierte Struktur oder Klasse als Freund in C?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-09 08:49:021018Durchsuche

How to Declare a Templated Struct or Class as a Friend in C  ?

Eine auf Vorlagen basierende Struktur oder Klasse als Freund deklarieren

In der C-Programmierung ist es möglich, eine auf Vorlagen basierende Struktur oder Klasse als Freund zu deklarieren zu einer anderen Klasse und ermöglicht so effektiv den Zugriff auf private Mitglieder. Bei einigen Compilern, wie z. B. VC8, können jedoch bei der Implementierung dieser Funktion Fehler auftreten.

Falsche Syntax:

Der folgende Code versucht, eine auf Vorlagen basierende Struktur foo als zu deklarieren Freund aller anderen Instanziierungen von foo:

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

   private:
    // ...
};

Dies führt jedoch dazu, dass Fehler:

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

Korrekte Syntax:

Um eine Vorlagenstruktur oder -klasse korrekt als Freund zu deklarieren, verwenden Sie die folgende Syntax:

template <typename> friend class foo;

Dadurch können alle Template-Instanziierungen von foo wie gewünscht miteinander befreundet sein. Daher sollte der korrekte Code lauten:

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

   private:
    // ...
};

Das obige ist der detaillierte Inhalt vonWie deklariere ich eine vorlagenbasierte Struktur oder Klasse als Freund in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn