Ответ 1
Существует соглашение определяющее супер typedef в каждом классе.
В Java вместо использования оператора scope используется super: ex/
C++ -> GenericBase::SomeVirtualFunction();
Java -> super.someVirtualMethod();
Есть ли что-то подобное в С++ или это не имеет смысла в С++ из-за множественного наследования?
Спасибо
Существует соглашение определяющее супер typedef в каждом классе.
Компиляторы Microsoft имеют (отклоненные стандартным коммитом С++) расширение __ super.
Изменить: Super может запутать читателей кода. Из-за множественного наследования в С++ лучше быть более явным. Множественное наследование уже сложно. Была дискуссия AFAIK о полезности супер для шаблонов, которые успокоились после того, как было осознано, что любой может typedef супер, если он в ней нуждается.
Тройка typedef в ссылке Мартина работает довольно хорошо (и эта частичная причина, почему С++ не имеет супер или унаследованного ключевого слова AFAIR.) Единственное, что нам нужно заботиться, это то, что typedef должен находиться в частной секции. Не помещайте его в защищенный или открытый раздел, иначе производный класс может ошибочно использовать typedef для ссылки на своего дедушки и бабушки, а не на своего родителя.
В С++ нет такой вещи, хотя вы можете предоставить свой собственный typedef
:
struct Derived : Base
{
typedef Base super;
};