I’m trying to inherit from a template class, using a type defined in the derived class.
I have tried this, but it doesn’t work.
class A : std::vector<A::B>
{
enum B { foo, bar };
};
Is there an elegant way of doing this ?
Edit : I know that it works if B is defined earlier. But i’m looking for a solution that allows encapsulating the type B inside the A class.
In my view, the best (admittedly indirect) solution is to use composition rather than inheritance:
If for some reason you need (or really want) to use private inheritance to embed the vector in your object, then the type will need to be defined before the class, at namespace scope, since types cannot be used before they are declared. If they are not indended to be accessed by users of the class, and you don’t want to pollute the namespace containing your class, then you could put them inside a namespace to indicate that they are implementation details: