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!