When base class A is abstract, save for a few functions common the the entire class hierarchy… and class B is declared:
template <class widgetType> class B : public A { ... };
and class C is declared:
class C : public B<myWidget> { ... };
is there any reason that some of those functions declared in A will not inherit through to class C?
I have two (virtual) functions with the same name but different parameters implemented in A, one of which is overridden in C. When I try to access the non-overridden function with my instance of class C, the compiler cannot find it. I cannot see anything wrong… so I’m interested to know if there are special rules around templates and inheritance I have not understood.
You’ve run into function hiding. If a class defines a method with the same name as one in a base class, whether it’s an override or not, that method will hide the others from the base class. Templates have nothing to do with it.
When the compiler tries to resolve a function name, it looks in the context of the most derived class first. If it finds the name defined there, it stops looking deeper and only considers those names defined at the same level.