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
Freigeben: 2024-11-09 08:49:02
Original
1014 Leute haben es durchsucht

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:
    // ...
};
Nach dem Login kopieren

Dies führt jedoch dazu, dass Fehler:

error C3857: 'foo<T>': multiple template parameter lists are not allowed
Nach dem Login kopieren

Korrekte Syntax:

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

template <typename> friend class foo;
Nach dem Login kopieren

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:
    // ...
};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage