crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

lanz
  опции профиля:
сообщение 26.3.2013, 13:27
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


В общем суть такова, есть некоторое количество(N) классов, наследующих от общего предка.
У предка есть интерфейс управления для обработки команд.
Раскрывающийся текст
class Base {
    public:
        virtual void Command (QString, QVariant);
};

Естественно конкретные реализации по разному обрабатывают команды.
В первом приближении примерно так:
Раскрывающийся текст
class DerivedN {
    public:
        virtual void Command (QString, QVariant) {
            switch (QString) {
                ...
                ...
            }
        };
};

Естественно это не очень красиво, поэтому сразу второе приближение:
Раскрывающийся текст
class DerivedN {
    public:
        virtual void Command (QString, QVariant) {
            this->map[QString] (QVariant);
        };
};

В map хранятся указатели на функции члены. Естественно мне захотелось вынести все это в базовый класс.
Раскрывающийся текст
class Base {
    public:
        void Command (QString, QVariant) {
            if (this->processors.contains (QString)) {
                this->processors[QString] (this, QVariant);
            };
        };
    protected:
        typedef std::function<void (Base*, QVariant)> CommandProc;
        QMap<QString,CommandProc> processors;


Загвоздка в том что мы не можем добавлять функции-члены наследующих классов в список. Можно конечно обойтись списком свободных функций,
но интересно, как описать Map который будет содержать функции члены не только базового но и производных классов?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- lanz   Архитектурный вопрос   26.3.2013, 13:27
- - Влад   Вот так и описать. А заполнение этого мэпа происхо...   26.3.2013, 13:37
- - lanz   ЦитатаВот так и описать. Не выходит. Цитатаerror C...   26.3.2013, 14:10
|- - Влад   Цитата(lanz @ 26.3.2013, 15:10) Так поним...   26.3.2013, 14:21
- - lanz   Downcast-ить то его можно, только проблема в том ч...   26.3.2013, 14:59
- - lanz   Сделал так: Раскрывающийся текстclass Base : p...   26.3.2013, 16:16
- - Алексей1153   lanz, все названия функций - в текстовом виде, все...   26.3.2013, 18:04
- - Iron Bug   Вот, по-быстрому написала, как в С++11 это сделать...   26.3.2013, 22:43
- - lanz   ЦитатаВот, по-быстрому написала Настоящая черная ...   27.3.2013, 8:39
|- - Iron Bug   Цитата(lanz @ 27.3.2013, 11:39) Насколько...   27.3.2013, 10:53
- - Алексей1153   Цитата(lanz @ 27.3.2013, 11:39) стати нас...   27.3.2013, 13:21
- - lanz   Цитатаделай для этого отдельный быстрый метод без ...   27.3.2013, 13:45
- - Алексей1153   lanz, а где, что и в каких объёмах будет гоняться ...   27.3.2013, 13:51
- - lanz   Графики кривых, 5-10К точек, хотелось бы хотябы 10...   27.3.2013, 14:43
|- - Iron Bug   Цитата(lanz @ 27.3.2013, 17:43) Как кстат...   27.3.2013, 19:37
- - Алексей1153   lanz, ну тут, само собой, лучше оставить лазейку д...   27.3.2013, 18:21


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.6.2025, 16:47