2016-04-13 13 views
1

eine kaskadierte Vererbungshierarchie in C++ Gegeben:C++ variadische Vorlagen zur Kaskadenvererbung. Wie man upcast?

struct MyBaseClass 
{ 
protected: 
    void f(); 
}; 

template <typename Fn, typename... Args> 
struct MyClass<Fn, Args...> : MyClass<Args...> 
{ 
...//from here can I access MyBaseClass::f() ? 
}; 
template <typename Fn> 
struct MyClass<Fn> : MyBaseClass{...}; 

Wie in der obigen Kommentarzeile angezeigt ist, will ich von MyBaseClass eine geschützte Methode aufrufen vom Anwendungsbereich der MyClass. Wie ist das möglich?

Antwort

3

Ich möchte eine geschützte Methode von MyBaseClass aus dem Bereich von MyClass aufrufen.

Es gibt ein paar Möglichkeiten, wie Sie eine Matrizenabhängiger Funktion einer Basisklasse aus einer abgeleiteten Klasse aufrufen können:

this->f();   // Call f of this class, or any base class. 
this->MyClass::f() // Call MyClass::f of MyClass base sub-object of this class only. 
MyClass::f()  // Call MyClass::f either of MyClass base sub-object or of any unrelated MyClass. 

Siehe Dependent names für mehr Details.

4

Eine weitere alternative Lösung für Maxims wird den Namen der Funktion mit der Klasse des Namens voll qualifizierenden (demo):

MyBaseClass::f(); 
+0

Yep, dass das Problem gelöst, so weit wie kann ich sagen! – user3046585

Verwandte Themen