|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.01.2011, 18:47 | #1 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 78
|
Вектор из callback'ов методов класса
С++ изучаю недавно, могут быть проблемы с пониманием.
Существует произвольный class_A, имеющий несколько методов, различные по своему алгоритму, но имеющие всего один входной параметр произвольного типа данных. Необходимо создать класс Callback_Manager, основными методами которого являются set (занести коллбэк в вектор) и get (вызвать каждый из коллбэков вектора). На данном этапе готов функтор и заполнение вектора из main. (компилируется и работает) Код:
Код:
Пишу глупости.
|
05.01.2011, 05:15 | #2 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Gongled
во-первых, хочу поблагодарить за такой ШИКАРНЕЙШИЙ вопрос. просто мега респект, чел. мне очень понравилось) от души вот во-вторых, ты реально жжошь, если въехал во все, что тут написал. я плюсы изучаю 3 года, и то, только подошел к таким сложным вещам. что показывает мою тупость... ну и в третьих мои замечания 1. код плохо форматирован 2. слишком много объявлений синонимов, тяжело читается 3. немного не правильная идея реализации. зачем менеджеру коллбеков знать о параметрах, возвращаемых значениях и тип коллбеков? таким образом, ты привязал свой манагер к одному типу коллбеков, что не пять. 4. в векторе хранишь значения коллбеков. а нада указатели. зачем лишние копирования может быть еще что, но я особо не вчитывался моя реализация. Код:
недоделки в моем коде: 1. полиморфные объекты-коллбеки, хранящиеся в векторе, не уничтожаются. нужен smart_ptr, либо иначе освободить память. мне было влом 2. operator() у меня не возвращает тип твоего коллбека, а просто void. иначе яб не смог сделать callbackManager таким, какой он получился если это действительно так надо, нужно думать это все можно дальше развивать, например, придумать удобную передачу нескольких параметров методов и тд. на первый взгляд тут нужен фабричный метод. вообще неплохо сесть и заново все обдумать, думаю, можно сделать еще красивее но если тебе не критично это возвращаемое значение у operator(), то тебе должен понравиться мой код) удачи
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 05.01.2011 в 14:33. |
05.01.2011, 11:40 | #3 | ||
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
Цитата:
Цитата:
Код:
Кстати, лучше все-таки писать typename вместо class. Последний раз редактировалось still_alive; 05.01.2011 в 11:46. |
||
05.01.2011, 14:14 | #4 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2still_alive
Цитата:
с const методами да, постоянно забываю а for_each не использовал из за необходимости еще одного функтора) кстате, не в курсе, можно ли в for_each третьим параметром как нить передать текущий итератор?) нам же нужно всего лишь вызвать operator(), который можно вызывать через наш итератор. какой нить класс current_iterator, я не знаю там да, твоя реализация возвращаемых значений мне не понравилась) без обид нужно придумать поудобнее)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 05.01.2011 в 14:38. |
|
05.01.2011, 14:49 | #5 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 78
|
Огромное спасибо
pproger, спасибо за алгоритм, именно то, что мне и нужно было. Говоря о нечитабельности кода, давно ищу литературу, в которой было бы подробно пояснено как правильно называть переменные, какими должны быть хорошие комментарии и какими принципами стоит руководствоваться при разработке приложений. У вас есть на примете такая?
still_alive, да, модификаторы произвольные. Благодарствую за отклик, вы мне очень помогли. Для контролем за памятью рекомендуете воспользоваться boost::shared_prt, а можно для этой цели использовать умный указатель из std::auto_ptr?
Пишу глупости.
|
05.01.2011, 15:22 | #6 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2Gongled
не знаю, complete code попробуй Макконнелла
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
05.01.2011, 16:05 | #7 | |||
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
Цитата:
Цитата:
Код:
Цитата:
Придумай) А то мне сейчас некогда думать, у меня другие проблемы, связанные с многопоточностью) 2Gongled На счет стиля - лично я смешал стиль кьют со стилем гугла. Поищи qt google coding style. auto_ptr и стандартные контейнеры плохо переносят друг друга. Очень не рекомендую. Последний раз редактировалось still_alive; 05.01.2011 в 16:07. |
|||
05.01.2011, 16:29 | #8 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2still_alive
Цитата:
думать я не особо люблю) auto_ptr вообще нельзя хранить в контейнерах)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вынос методов класса в дин библиотеки(dll) | Пепел Феникса | Общие вопросы C/C++ | 8 | 07.12.2010 20:55 |
массив методов класса | DartDayring | Общие вопросы C/C++ | 0 | 07.12.2010 20:00 |
вектор как закрытый член класса, как изменять его значения? | Zhigool' | Общие вопросы C/C++ | 3 | 08.08.2010 23:19 |
Создание класса "Трехмерный вектор" | steel_may | Помощь студентам | 1 | 09.05.2009 12:29 |
Использование методов вне класса | prikolist | Общие вопросы C/C++ | 12 | 07.05.2009 13:57 |