„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie können Sie in C++ auf Vorlagen basierende Strukturen/Klassen als Freunde deklarieren?

Wie können Sie in C++ auf Vorlagen basierende Strukturen/Klassen als Freunde deklarieren?

Veröffentlicht am 19.11.2024
Durchsuche:179

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

Vorlagenbasierte Strukturen/Klassen als Freunde deklarieren

Im Bereich von 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 
struct foo
{
    template 
    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 auf nur bestimmte Instanziierungen beschränken müssen, können Sie dies mit dieser Syntax erreichen:

template 
struct foo
{
    template 
    friend struct foo;

private:
    // ...
};

Leider erlaubt diese Syntax keine generische Deklaration, die alle möglichen Instanziierungen von foo enthält.

Wenn Ihr Ziel also darin besteht, Freundschaft über alle Vorlageninstanziierungen von foo hinweg aufzubauen, Der zweite Ansatz mit der Friend-Klasse foo kommt angesichts der Einschränkungen der C-Syntax am nächsten.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3