Ich habe den folgenden Code: eine Schablonenklasse, die von einer Schnittstelle abgeleitet wird, benötigt eine statische lokale Funktion. Ich habe es als Freund erklärt; Die Funktion kann jedoch die privaten/geschützten Mitglieder nicht "innerhalb dieses Kontexts" aufrufen.Wie man Freund eine statische locale Funktion erklärt
Wie legen Sie diese statische Gebietsschema-Funktion als Freund richtig fest?
Ich spezifiziere meine Klasse als Vorlage weil ich deswegen keine Inline-Friend-Funktion verwenden kann (der Compiler sagt, dass meine Funktion neu definiert ist).
Außerdem kann ich die Interface-Klasse nicht ändern.
Dies ist der Code:
class Interface
{
protected:
virtual void virt(void) = 0;
};
static void bar(Interface *b);
template<class T>
class Foo : public Interface
{
// How to properly say the local function bar is friend ?
friend void bar(Interface *b);
T val;
public:
void virt(void)
{
}
void func(void)
{
bar(this);
}
};
static void bar(Interface *b)
{
b->virt(); // Error: virt() is protected.
}
int main(void)
{
Foo<int> foo;
foo.func();
return 0;
}
Vielen Dank für Ihre Erklärung, ich sehe ich den Freund Konzept falsch verstanden. Allerdings akzeptierte ich die flatmouse Antwort, weil er mir eine Lösung für das Problem gab. – Boiethios