Inheritance with template classes
I'm trying to figure out, how can I inherit from template class to template class. The problem is: I can't use protected members of Parent class.
Example:
template <class N>
class Parent {
protected:
N member;
public:
Parent(N aa){
member = aa;
}
};
class Child1: public Parent<int>{
public:
Child1(int a): Parent<int>(a) {
member += 1; // works
}
};
template<class Q>
class Child2: public Parent<Q>{
public:
Child2(int a): Parent<Q>(a) {
member += 1; // does not work (use of undeclared identifier)
}
};
How can I use "member" in the Child2 class?
Thanks for your time
You need to use this->member
or Parent<Q>::member
.
In the second case, member
is a "dependent name" because the existence of member
from the base class template Parent<Q>
depends on the type of class Q
in the template, whereas in the first example there is no dependent type, the compiler can statically analyze that Parent<int>
contains member
.