Frage

Wie kann ich tun, um eine Wrapper-Funktion, die eine andere Funktion mit genau demselben Namen und Parameter wie die Wrapper-Funktion selbst in globalen Namensraum nennt?

Zum Beispiel habe ich in A. h foo (int bar); und in A.cpp ihre Implementierung und in B.h foo (int bar); und in B.cpp foo (int bar) {foo (bar)}

Ich möchte, dass die B.cpp die foo (bar) ruft A. h die foo (int bar), nicht rekursiv selbst.

Wie kann ich das tun? Ich möchte nicht, foo umbenennen.

Update:

A. h ist in globalen Namensraum, und ich kann es nicht ändern, also denke ich, Namespaces ist keine Option?

Update:

Namespaces das Problem zu lösen. Ich wusste nicht, Sie globalen Namespace-Funktion mit :: foo () aufrufen können

War es hilfreich?

Lösung

tut B vererben / Arbeitsgeräte A überhaupt?

Wenn ja, können Sie verwenden

int B::foo(int bar) 
{ 
   ::foo(bar); 
}

die foo im globalen Namespace zugreifen

oder, wenn es nicht .. nicht erben können Sie den Namespace auf B verwenden nur

namespace B
{
int foo(int bar) { ::foo(bar); }
};

Andere Tipps

einen Namespace

namespace A
{
int foo(int bar);
};
namespace B
{
int foo(int bar) { A::foo(bar); }
};

Sie können auch unter Verwendung von Namensraum A schreiben; in Ihrem Code aber es ist nie sehr zu empfehlen mit Namespace in einem Header zu schreiben.

Dies ist das Problem, dass Namespaces versuchen zu lösen. Können Sie Namespaces auf die foo der in Frage hinzufügen? Dann haben Sie eine Möglichkeit, dies zu lösen. Auf jeden Fall würden Sie Linker Probleme treffen, wenn sie beide in globalen Namensraum sind.

Sie können dies nicht tun, ohne Verwendung von Namespaces, den Namen einer der Funktionen zu ändern, die Änderung der Signatur oder macht eine von ihnen statisch. Das Problem ist, dass Sie nicht mehr als 2 Funktionen mit dem gleichen Namen verstümmelt haben. Also es muss etwas sein, das sie von anderen unterscheiden.

Wie oben erwähnt, Namensraum ist eine Lösung. Wenn man jedoch annimmt Sie dieses Maß an Flexibilität haben, warum Sie diese Funktion nicht in kapseln Klassen / structs?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top