![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 78
|
![]()
С++ изучаю недавно, могут быть проблемы с пониманием.
Существует произвольный class_A, имеющий несколько методов, различные по своему алгоритму, но имеющие всего один входной параметр произвольного типа данных. Необходимо создать класс Callback_Manager, основными методами которого являются set (занести коллбэк в вектор) и get (вызвать каждый из коллбэков вектора). На данном этапе готов функтор и заполнение вектора из main. (компилируется и работает) Код:
Код:
Пишу глупости.
|
![]() |
![]() |
![]() |
#2 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
2Gongled
во-первых, хочу поблагодарить за такой ШИКАРНЕЙШИЙ вопрос. просто мега респект, чел. мне очень понравилось) от души вот во-вторых, ты реально жжошь, если въехал во все, что тут написал. я плюсы изучаю 3 года, и то, только подошел к таким сложным вещам. что показывает мою тупость... ну и в третьих мои замечания 1. код плохо форматирован 2. слишком много объявлений синонимов, тяжело читается 3. немного не правильная идея реализации. зачем менеджеру коллбеков знать о параметрах, возвращаемых значениях и тип коллбеков? таким образом, ты привязал свой манагер к одному типу коллбеков, что не пять. 4. в векторе хранишь значения коллбеков. а нада указатели. зачем лишние копирования может быть еще что, но я особо не вчитывался моя реализация. Код:
![]() недоделки в моем коде: 1. полиморфные объекты-коллбеки, хранящиеся в векторе, не уничтожаются. нужен smart_ptr, либо иначе освободить память. мне было влом ![]() 2. operator() у меня не возвращает тип твоего коллбека, а просто void. иначе яб не смог сделать callbackManager таким, какой он получился ![]() это все можно дальше развивать, например, придумать удобную передачу нескольких параметров методов и тд. на первый взгляд тут нужен фабричный метод. вообще неплохо сесть и заново все обдумать, думаю, можно сделать еще красивее ![]() удачи ![]()
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. |
![]() |
![]() |
![]() |
#3 | ||
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
![]() Цитата:
Цитата:
Код:
Кстати, лучше все-таки писать typename вместо class. Последний раз редактировалось still_alive; 05.01.2011 в 11:46. |
||
![]() |
![]() |
![]() |
#4 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
2still_alive
Цитата:
с const методами да, постоянно забываю ![]() да, твоя реализация возвращаемых значений мне не понравилась) без обид ![]()
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. |
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 17.02.2009
Сообщений: 78
|
![]()
pproger, спасибо за алгоритм, именно то, что мне и нужно было. Говоря о нечитабельности кода, давно ищу литературу, в которой было бы подробно пояснено как правильно называть переменные, какими должны быть хорошие комментарии и какими принципами стоит руководствоваться при разработке приложений. У вас есть на примете такая?
![]() still_alive, да, модификаторы произвольные. Благодарствую за отклик, вы мне очень помогли. Для контролем за памятью рекомендуете воспользоваться boost::shared_prt, а можно для этой цели использовать умный указатель из std::auto_ptr?
Пишу глупости.
|
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#7 | |||
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
![]() Цитата:
Цитата:
Код:
Цитата:
Придумай) А то мне сейчас некогда думать, у меня другие проблемы, связанные с многопоточностью) 2Gongled На счет стиля - лично я смешал стиль кьют со стилем гугла. Поищи qt google coding style. auto_ptr и стандартные контейнеры плохо переносят друг друга. Очень не рекомендую. Последний раз редактировалось still_alive; 05.01.2011 в 16:07. |
|||
![]() |
![]() |
![]() |
#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 |