Сценарий:Кастинг указателя базового класса на неизвестный подкласс возможно как-то?
BaseClass* pointer = &subClassXObject; // subClassXObject is object of class subClassX
// which is derived from BaseClass and
// Instance<subClassX>. (Instance<subClassX> is
// for counting instances of type subClassX.)
// Instance<subClassX> is derived from
// BaseInstance.
& ... стоит для получения адреса, C++ Стандартная терминология может определить объект как адрес уже, в этом случае & ... является сам объект
Класс subClassXObject в данный момент неизвестен, это может быть любой определенный подкласс BaseClass.
Известно, что это один из прямых производных подклассов BaseClass, каждый из которых также наследует экземпляр SubClassX >, где subClassX является именем прямого производного подкласса BaseClass.
Экземпляр <subClassX> наследуется от BaseInstance. BaseInstance определяет общедоступную чистую виртуальную функцию, которую реализует экземпляр <subClassX>, это имя getDescriptor.
Таким образом, каждый объект subClassObject имеет доступ к getDescriptor.
SubClassX* pointer = &subClassXObject;
pointer->getDescriptor(); // This should work
(Или это не сейчас я отсев:? Я должен явно реализовать открытый метод базового класса в подклассе для того, чтобы кто-то будучи в состоянии назвать его по подклассу снаружи нет .. ., не так ли?).
Мне нравится
BaseClass* pointer = &subClassXObject;
pointer->getDescriptor();
работать.
Перемещение getDescriptor из BaseInstance и Instance <subClassX> к BaseClass и каждый подклассов можно, однако я хочу пользователей моего BaseClass только писать логику коду приложения, а не инфраструктуры кода (даже если они только должны были бы возвращать Instance <subClassX> методы возвращают значение). Идея этого заключается в создании браузера объектов, в который каждый экземпляр объекта добавляется и отображается без необходимости добавления любого неклассического кода.
Указатель на использование BaseInstance * вызывает сбой приложения. Таким образом, мой вопрос сформулирован в заголовке .
Благодарим вас за заботу!
Название вашего вопроса гласит: «...указатель заливки базового класса к неизвестному подклассу ... ». Текст вашего вопроса описывает бросок в противоположном направлении: от подкласса к базовому классу. Итак, в каком направлении вы хотите бросить? – AnT
Это может быть больше транс -class cast: от BaseClass до BaseInstance, поскольку я не знаю subClassX.Я вижу, что это не является вполне определяемым в коде без RTTI (который я не хочу касаться), таким образом, я удалил последний абзац. Возможно, какое-то дополнение Экземпляр может достичь определяемости? –
Я не понимаю: subClassX - это как раз такой же ребенок BaseInstance, как и у BaseClass - тем более, что BaseInstance на первом месте. Если таблица виртуальных функций работает для BaseClass *, она должна работать одинаково для BaseInstance * Он должен работать, если он был объявлен BaseInstance с самого начала. Если это так, то почему приложение сбой после кастома? –