Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > operator== в абстрактном классе |
Автор: cupper 10.8.2011, 11:40 | ||||
Загнал себя в угол. Есть абстрактный класс
есть наследник
Классы Y и Z это чернорабочие, они юзают разные сторонние библиотеки, подключают разные хедеры. А класс X это как бы такой чистый интерфейс (only стандартные заголовки). И вот как мне вывернуться что бы в Y реализовать это самое сравнение, что то мне не особо понятно. Потому что там я имею только указатель на чистый интерфейс, которые не содержит НЕ нужных для сравнения данных, НЕ методов обращения к ним. Эти методы могут появиться только в Y. Но тогда мне надо делать down cast чего я не хочу делать. |
Автор: bsa 10.8.2011, 13:00 |
значит тебе необходимо сделать виртуальные методы у X, которые позволят получить данные, необходимые для сравнивания. Иначе сделать без downcasting и/или typeinfo нельзя. |
Автор: cupper 10.8.2011, 13:29 | ||
так и пришлось, сделать метод для доступа к данным которые пользователю по сути и не нужны. Теперь это новая "фича". |
Автор: bsa 10.8.2011, 13:42 |
сделай функцию защищенной, а оператор сравнения френдом. |
Автор: mes 10.8.2011, 14:16 |
Иерархия стабильна ? т.е. Вам (разработчику) известны все наследники этого интерфейса или пользователю позволено наследоваться и расширять иеррархию ? Добавлено через 5 минут и 53 секунды если да то поиск по мультиметоды.. |
Автор: Earnest 10.8.2011, 17:10 |
А по-моему, тут не надо усложнять себе жизнь; dynamic_cast для таких случаев и нужен. Тем более, что здесь он весьма уместен: если аргумент equal имеет не тот тип (т.e. Y), то, очевидно, false. |
Автор: spyswamp 12.8.2011, 09:49 |
Вот именно. Лишние функции и прочие извраты в X не нужны. |