В языке нет общего механизма, который бы рассказывал вам обо всех базовых классах, хотя вы можете добавить подходящий typedef ко всем членам вашей иерархии классов, который сделает эту информацию доступной (например, typedef aкортеж, типы аргументов которого являются предком плюс предки предка) - вы, вероятно, могли бы написать небольшой миксин для этого.
Что касается проверки, является ли что-то основанием другого, это уже является частью стандарта в формечерты типа std::is_base_of
.