2016-04-13 28 views
1

:C++ variadic şablonları. upcast nasıl? C++ Kademeli bir miras hiyerarşisi Verilen

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

yukarıdaki yorum hattında belirtildiği gibi, MyClass kapsamından MyBaseClass kalma korunan yöntemi çağırmak istiyorum. Bu nasıl olabilir?

cevap

3

MyCaseClass'tan MyClass'ın kapsamından korunan bir yöntemi aramak istiyorum.

bir türetilmiş sınıftan bir temel sınıf bir şablon bağımlı fonksiyon çağırmak için birkaç yol vardır:

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. 

fazla ayrıntı için Dependent names bakınız.

4

Maxim en tamamen sınıfının adıyla (demo) ile işlev adı kalifiye olduğu diğer alternatif çözüm:

MyBaseClass::f(); 
+0

Evet, konuyu çözmüş, kadarıyla söyleyebilirim! – user3046585