![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
lanz |
![]()
Сообщение
#1
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
В общем суть такова, есть некоторое количество(N) классов, наследующих от общего предка.
У предка есть интерфейс управления для обработки команд. Раскрывающийся текст
Естественно конкретные реализации по разному обрабатывают команды. В первом приближении примерно так: Раскрывающийся текст
Естественно это не очень красиво, поэтому сразу второе приближение: Раскрывающийся текст
В map хранятся указатели на функции члены. Естественно мне захотелось вынести все это в базовый класс. Раскрывающийся текст
Загвоздка в том что мы не можем добавлять функции-члены наследующих классов в список. Можно конечно обойтись списком свободных функций, но интересно, как описать Map который будет содержать функции члены не только базового но и производных классов? |
|
|
![]() |
lanz |
![]()
Сообщение
#2
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Вот, по-быстрому написала Настоящая черная магия ![]() Супер, спасибо! Насколько я понимаю, в старом std/tr1 так не получится или я что-то упустил? Цитата lanz, все названия функций - в текстовом виде, все параметры- в текстовом виде. Кстати насчет массивов данных, что тут лучше, base64? Нормально будет для объемов до 500Кб? А то что то меня душит, непойму что ![]() |
|
|
Iron Bug |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Насколько я понимаю, в старом std/tr1 так не получится или я что-то упустил? наверное, можно, если буст прикрутить. там тоже есть какие-то ограничения на компилятор, но не такие строгие. в бусте связывание уже давно было, я даже не помню, с какой версии оно начало поддерживаться. то, что проходит обкатку в бусте, чаще всего потом переходит в стандарт. тут главная проблема - это разные представления "указателей" на методы классов. на самом деле, это нифига не указатели, а сложные структуры, которые не стандартизованы и у каждого компилятора они свои и даже меняются от версии к версии внутри одного компилятора. поэтому делегирование методов комитет по стандартизации переложил на разработчиков стандартных библиотек, идущих вместе с компилятором, что вполне логично. чистого делегирования в С++ нет, зато есть связывание, которое заменяет делегирование на практике. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 23.6.2025, 0:07 |