Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пара вопросов про массив хэндлеров, и инициализацию структуры нулевыми знач. 
:(
    Опции темы
SABROG
Дата 30.4.2010, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Цитата(mes @  30.4.2010,  23:05 Найти цитируемый пост)
Вот это опять вода.. суть порядковые они или нет ?

Если бы я знал значение слова "порядковый", то сказал бы. Могу сказать, что числа идут неразрывно от нуля до >30, то есть если делать i++, то будет последовательный перебор всех состояний.

Цитата(mes @  30.4.2010,  23:05 Найти цитируемый пост)
Терь знаем.. значит удобно отразить на вектор. оистался вопрос вектор чего

smile вероятно вектор хендлеров, так как первый элемент вектора будет характеризовать состояние со значением 0 и т.д. Только вот вектор ведь заполняется в рантайме, а Си массив уже заполненый загружается.

Цитата(mes @  30.4.2010,  23:05 Найти цитируемый пост)
исходя из того как я понял представленное, не очень. 

Нуу, эмм, советуйте как правильней...


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 30.4.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(SABROG @  30.4.2010,  22:03 Найти цитируемый пост)
Хотя с unregister() повышается читабельность кода, тут надо подумать, что мне важнее, понимать код через пару лет или искать комментария по коду и в голове прокручивать логику

приведенные пункты не противоречат друг друга.. Т.е. чем луше читабельность, тем меньше напрягов с комментами и логикой.

Добавлено через 1 минуту и 25 секунд
Цитата(SABROG @  30.4.2010,  22:18 Найти цитируемый пост)
что числа идут неразрывно от нуля до >30, то есть если делать i++, то будет последовательный перебор всех состояний.

сорри, я перепутал "порядковыйй" с "последовательным".

Добавлено через 2 минуты и 10 секунд
Цитата(SABROG @  30.4.2010,  22:18 Найти цитируемый пост)
вероятно вектор хендлеров,

хэндлер может быть выражен как методом, так и объектом.

Добавлено через 5 минут и 29 секунд
Цитата(SABROG @  30.4.2010,  22:18 Найти цитируемый пост)
Только вот вектор 

вектор, в контексте темы, это не std::vector, a любое линейно представленный контейнер, в том числе и обычный массив.

Добавлено через 7 минут и 1 секунду
Цитата(SABROG @  30.4.2010,  22:18 Найти цитируемый пост)
Нуу, эмм, советуйте как правильней... 

ну так пытаюсь, но Вы так и не ответили как связан хэндлер и регистрация фильтра.. 



--------------------
PM MAIL WWW   Вверх
SABROG
Дата 30.4.2010, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 1
Всего: 91



Цитата(mes @  30.4.2010,  23:05 Найти цитируемый пост)
мм.. кто он ?

Объект.

Цитата(mes @  30.4.2010,  23:05 Найти цитируемый пост)
зачем ? статические функции фильтра адресуют вызов методу обработчика, который представлен например статической переменной..

То есть мне нужно 30 статических переменных, которые будут предоставлять метод для обработки состояний?

Цитата(mes @  30.4.2010,  23:05 Найти цитируемый пост)
да, только не функция, а статическая функция-член

А какому классу она должна принадлежать, QApplication?

Цитата(mes @  30.4.2010,  23:05 Найти цитируемый пост)
не лучше, так как как можно выделить как единицу логики - как регистрировать фильтр лучше всего знает фильтр.. вам же нужно не произвольный набор колбяков регистровать, а  именно фильтр.

Цитата(mes @  30.4.2010,  23:21 Найти цитируемый пост)
приведенные пункты не противоречат друг друга.. Т.е. чем луше читабельность, тем меньше напрягов с комментами и логикой.

Согласен. Сделаю Register и Unregister.

Цитата(mes @  30.4.2010,  23:21 Найти цитируемый пост)
хэндлер может быть выражен как методом, так и объектом.

Если объектом считать указатель на функцию, то смысла добавлять её в вектор не вижу. Если объектом считать некий класс, который будет предоставлять перегруженный оператор (), то объявлять >30 классов не хотелось бы.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
mes
Дата 30.4.2010, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(SABROG @  30.4.2010,  22:28 Найти цитируемый пост)
Если объектом считать некий класс, который будет предоставлять перегруженный оператор (),

если объектом считать объект класса представляющий общий интерфейс (т.е в контексте обсуждения, наследованным от базового класса с виртуальными функциями).
оператор ()  или нет тут совсем не важно.


Цитата(SABROG @  30.4.2010,  22:28 Найти цитируемый пост)
, то смысла добавлять её в вектор не вижу

под вектором подразумевается так же и тот же самый си-массив. 

Цитата(SABROG @  30.4.2010,  22:28 Найти цитируемый пост)
то объявлять >30 классов не хотелось бы. 

тут больше не от вашего желания зависит,а от постановки задачи.. В одном случае удобнее выразить методами, а в другом легче через классы..

Добавлено @ 23:43
Цитата(SABROG @  30.4.2010,  22:28 Найти цитируемый пост)
То есть мне нужно 30 статических переменных

нет.. не стоит впадать в крайности..  достаточно и одной. smile

Добавлено через 3 минуты и 58 секунд
Цитата(SABROG @  30.4.2010,  22:28 Найти цитируемый пост)
А какому классу она должна принадлежать, QApplication?

тут зависит от Вас.. правильнее выразить через отдельный класс, но если лень и MyApplicatioн чист, то можно и в нем напрямую.

Добавлено через 5 минут и 58 секунд
могу набросать схему кода, если ответите на мой неоднакратно поставленный вопрос, как хэндлер связан с регистацией фильтра  ?
а также что должно быть на выходе хэндлера ? в чем выражается его работа ? 


Это сообщение отредактировал(а) mes - 30.4.2010, 23:43


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 1.5.2010, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(SABROG @  30.4.2010,  22:35 Найти цитируемый пост)
То ли я уже нажрался в хлам, то ли просто не могу тебя понять. Эвент - структура, в структуре есть int поле, которое может принимать 30 и более значений состояния, все имена состояний описаны в системном хедере линукса. Я их всех undef'нул и создал свой enum с такими же именами, а благодаря метаобъектной системе у этого enum'a еще и появился массив текстовых названий каждого члена перечисления. В общем от числа (int) зависит то какой обработчик я запущу и то, что я буду спрашивать у ОС о дополнительной информации именно этого числового значения.


Цитата(mes @  30.4.2010,  22:16 Найти цитируемый пост)
"заступлюсь" за тс в этом случае, так как никакой динамики требущей бинда тут нет..

не совсем понял причем тут динамика? Ну это может быть не байнд а 
Цитата(SABROG @  30.4.2010,  22:15 Найти цитируемый пост)
По идее тут можно обойтись и стандартным std::bind1st(std::mem_fun(&MyClass::myMethod)

в принципе да, вполне можно обойтись без boost::bind, вот набросал пример.
Я не успеваю за вами все читать, так что извините если мой пост устареет к тому времени smile 
Код

#include <map>
#include <functional>
#include <iostream>

class Methods
{
    typedef std::mem_fun1_t<void, Methods, int> filterFunction;
    typedef std::map<int, filterFunction> filterMap;
public:
    Methods() {
        filters.insert(filterMap::value_type(0, filterFunction(&Methods::filter1)));
        filters.insert(filterMap::value_type(1, filterFunction(&Methods::filter2)));
        filters.insert(filterMap::value_type(2, filterFunction(&Methods::filter3)));
    }
    void invoke(int signal) {
        filterMap::iterator it = filters.find(signal);
        if (it == filters.end())
            throw std::runtime_error("Filter not registered");
        it->second(this, signal);
    }
    void filter1(int signal) {
        std::cout << signal << std::endl;
    }
    void filter2(int signal) {
        std::cout << signal << std::endl;
    }
    void filter3(int signal) {
        std::cout << signal << std::endl;
    }
private:
    filterMap filters;
};

int main()
{
    Methods m;
    m.invoke(1);
    m.invoke(2);
}


Это сообщение отредактировал(а) azesmcar - 1.5.2010, 08:26
PM   Вверх
mes
Дата 1.5.2010, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(azesmcar @  1.5.2010,  07:24 Найти цитируемый пост)
не совсем понял причем тут динамика? Ну это может быть не байнд а 

если б тс нужен был сервис, к которому можно было подключить любой обработчик, то да буст::функтион и буст::бинд были бы хорошим вариантом..
однако тс не хочет лишних расходов, и все что должно подключиться заранее известно.

Цитата(azesmcar @  1.5.2010,  07:24 Найти цитируемый пост)
в принципе да, вполне можно обойтись без boost::bind, вот набросал пример.

также мы выяснили, что ид эвентов последовательны, и вместо мап вполне подходит линейный контейнер (и тс отдает предпочтение статическому константному масиву).

Цитата(azesmcar @  1.5.2010,  07:24 Найти цитируемый пост)
не успеваю за вами все читать, так что извините если мой пост устареет к тому времени 

ну вот я как раз и рассказал, основное, что смоглось выясниться у тс.

smile


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 1.5.2010, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(mes @  1.5.2010,  08:52 Найти цитируемый пост)
также мы выяснили, что ид эвентов последовательны, и вместо мап вполне подходит линейный контейнер (и тс отдает предпочтение статическому константному масиву).

 smile не дочитал до этого, но саму идею это не отменяет.
PM   Вверх
mes
Дата 1.5.2010, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(azesmcar @  1.5.2010,  07:56 Найти цитируемый пост)
но саму идею это не отменяет. 

 smile 


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.