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

Wie deklariere ich eine als Vorlage erstellte Klasse oder Struktur als Freund?

Barbara Streisand
Barbara StreisandOriginal
2024-11-12 21:47:01937Durchsuche

How to Declare a Templated Class or Structure as a Friend?

Vorgefertigte Klasse oder Struktur als Freunddeklaration

Beim Versuch, eine vorgefertigte Struktur oder Klasse als Freund zu deklarieren, können Kompilierungsfehler auftreten. Betrachten Sie beispielsweise den folgenden Code:

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

private:
    // ...
};

Dieser Code kann nicht kompiliert werden und es wird eine Fehlermeldung angezeigt, die darauf hinweist, dass mehrere Vorlagenparameterlisten nicht zulässig sind. Sie möchten jedoch immer noch, dass alle möglichen Instanziierungen der foo-Vorlagenstruktur Freunde von foo sind. für jedes T.

Lösung

Um dies zu erreichen, können Sie die folgende Deklaration verwenden:

template <typename> friend class foo

Diese Deklaration bedeutet, dass Alle Template-Instanziierungen der Klasse foo sind Freunde aller anderen Template-Instanziierungen der Klasse foo-Klasse.

Zusätzlicher Hinweis

Die Deklaration

template <typename>
friend struct foo;

funktioniert auch, macht aber alle Template-Instanziierungen der foo-Struktur zu Freunden gegenseitig. Dies ist wahrscheinlich das von Ihnen beabsichtigte Verhalten. Es ist jedoch zu beachten, dass Friend-Deklarationen und -Vorlagen eine etwas komplexe Syntax haben.

Das obige ist der detaillierte Inhalt vonWie deklariere ich eine als Vorlage erstellte Klasse oder Struktur als Freund?. 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