Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Sie in C Template-Strukturen/Klassen als Freunde deklarieren?

Wie können Sie in C Template-Strukturen/Klassen als Freunde deklarieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-07 17:40:03875Durchsuche

How Can You Declare Templated Structs/Classes as Friends in C  ?

Vorlagenbasierte Strukturen/Klassen als Freunde deklarieren

Im Bereich C kann das Deklarieren von Vorlagenstrukturen oder Klassen als Freunde eine syntaxbezogene Hürde darstellen. Um dies zu erreichen, sollten Sie den folgenden Ansatz in Betracht ziehen:

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

private:
    // ...
};

Diese Syntax scheint erfolgreich kompiliert zu werden. Es deklariert jedoch alle Template-Instanziierungen von foo als Freunde zueinander, unabhängig vom Template-Parameter, den sie verwenden. Dies kann mit Ihrem beabsichtigten Anwendungsfall übereinstimmen oder auch nicht.

Wenn Sie die Freundschaft nur auf bestimmte Instanziierungen beschränken müssen, können Sie dies mit dieser Syntax erreichen:

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

private:
    // ...
};

Leider ist dies der Fall Die Syntax erlaubt keine generische Deklaration, die alle möglichen Instanziierungen von foo enthält.

Wenn es also Ihr Ziel ist, eine Freundschaft zwischen allen aufzubauen Bei den Vorlageninstanziierungen von foo kommt der zweite Ansatz mit der Freundklasse foo angesichts der Einschränkungen der C-Syntax am nächsten.

Das obige ist der detaillierte Inhalt vonWie können Sie in C Template-Strukturen/Klassen als Freunde deklarieren?. 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