2016-04-13 3 views
1

継承をカスケードするためのC++バリデーションテンプレート。どのようにアップキャストですか? C++でカスケード接続継承階層を考える

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{...}; 

上記のコメント行に示されているように、私は、MyClassのの範囲からMyBaseClassから保護されたメソッドを呼び出したいです。 これはどのように可能ですか?

答えて

3

MyClassのスコープからMyBaseClassから保護されたメソッドを呼び出す必要があります。

あなたは派生クラスから基底クラスの鋳型依存機能を呼び出すことができますいくつかの方法があります。

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. 

は詳細についてはDependent namesを参照してください。マキシムに

4

別の代替ソリューションは、完全に(demo)クラスの名前の関数名を修飾されています。私の知る限り、この問題を解決

MyBaseClass::f(); 
+0

うん、! – user3046585

関連する問題