2016-04-13 14 views
1

鑑於級聯繼承層次在C++:C++ variadic模板級聯繼承。如何上傳?

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

另一種替代解決方案Maxim的與類名(demo)完全限定函數名稱:

MyBaseClass::f(); 
+0

是的,這解決了這個問題,據我可以告訴! – user3046585