реклама на сайте
подробности

 
 
> Вопрос по С++
_Артём_
сообщение Dec 13 2011, 17:38
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Как бы правильно отработать такую ситуацию на С++:
Есть плата, на которую может устанавливаться два-три близких по системе команд GSM-модема (большинство нужных команд полностью идентичны).
Думаю делать так:
Создать класс содержащий все нужные функции (различающиеся команды объявить как виртуальные), от него создать нужное количество наследников с переопределёнными функциями и .
Тип модема может задаваьтся конфигурацией (байт в еепром) или определятся запросом версии AT-командой (предпочтительней).
А вот как дальше делать?
Как лучше объявить в программе переменную-наследника?
Компилятор IAR AVR.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
neiver
сообщение Dec 22 2011, 11:57
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Макросы в голом Си настолько-же опасны как и в С++, но в последнем есть возможность их много реже использовать:
- типизированные константы;
- inline функции;
- шаблонные функции;
- шаблоны классов.
Эти возможности успешно заменяют макросы и превосходят их в 99% случаев.
Но в 1% макросы нужны и в С++, поэтому они в нем есть.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Dec 22 2011, 17:29
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(neiver @ Dec 22 2011, 15:57) *
Эти возможности успешно заменяют макросы и превосходят их в 99% случаев.


Эти возможности вообще нихрена не могут в кодогенерации по сравнению с макросами

Код
#define CMDLINE_DEVICE_CHOOSE(name, dev1, dev2)                 \
        static char *cmdline_device_##name;                     \
        static int cmdline_device_##name##_setup(char *dev)     \
        {                                                       \
                cmdline_device_##name = dev + 1;                \
                return 0;                                       \
        }                                                       \
        __setup(#name, cmdline_device_##name##_setup);          \
        void mx23_init_##name(void)                             \
        {                                                       \
                if (!cmdline_device_##name ||                   \
                        !strcmp(cmdline_device_##name, #dev1))  \
                                mx23_init_##dev1();             \
                else if (!strcmp(cmdline_device_##name, #dev2)) \
                                mx23_init_##dev2();             \
                else                                            \
                        pr_err("Unknown %s assignment '%s'.\n", \
                                #name, cmdline_device_##name);  \
        }

CMDLINE_DEVICE_CHOOSE(ssp1, mmc, spi1)


Цитата
Т.е. опять всё наоборот: заявлено, что в С макросы - могущество, а в С++ - геморрой


В С++ макросами не пользуются по причине наличия встроенных средств языка - они дублируют часть возможностей макросов но слишком убоги по сравнению с ними.

Сообщение отредактировал sasamy - Dec 22 2011, 17:32
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 23 2011, 07:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sasamy @ Dec 22 2011, 21:29) *
Эти возможности вообще нихрена не могут в кодогенерации по сравнению с макросами
Замечательный пример. Показывает, что вы абсолютно не разбираетесь в том, что огульно охаиваете на протяжении уже нескольких страниц этой темы.
Весь этот ужас с макросом CMDLINE_DEVICE_CHOOSE замечательно ложится в тривиальный класс С++ (либо шаблонный, либо с парой виртуальных функций - как понравится)
Go to the top of the page
 
+Quote Post
sasamy
сообщение Dec 23 2011, 09:53
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(XVR @ Dec 23 2011, 11:28) *
Весь этот ужас с макросом CMDLINE_DEVICE_CHOOSE замечательно ложится в тривиальный класс С++ (либо шаблонный, либо с парой виртуальных функций - как понравится)


Это как раз говорит о том что вы как всегда несете чушь на протяжении этой темы - в шаблонах вы дальше типов не уедете, синтаксис вы не измените и то что этот пример может и не совсем удачный ничего не меняет (я его не писал специально - готовый пример - копипаста) - достаточно внести здесь условную компиляцию например в зависимости от устройства, платформы, конфига добавлять определенный код как ваш "тривиальный" класс превратится в месиво а у меня все будет как прежде ясно и кратко.

Цитата
либо с парой виртуальных функций


да вы вообще похоже не догоняете - у меня код автоматически генерируется а вам с вашими виртуальными ф-ми его вручную набивать надо будет для всех вариантов.
CMDLINE_DEVICE_CHOOSE(ssp1, mmc, spi1)
CMDLINE_DEVICE_CHOOSE(ssp2, nand_mfc, spi2)

Сообщение отредактировал sasamy - Dec 23 2011, 10:23
Go to the top of the page
 
+Quote Post
neiver
сообщение Dec 23 2011, 10:45
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Цитата(sasamy @ Dec 23 2011, 13:53) *
да вы вообще похоже не догоняете - у меня код автоматически генерируется а вам с вашими виртуальными ф-ми его вручную набивать надо будет для всех вариантов.
CMDLINE_DEVICE_CHOOSE(ssp1, mmc, spi1)
CMDLINE_DEVICE_CHOOSE(ssp2, nand_mfc, spi2)

Если вы не знаете как это сделать красиво, просто и надежно - так и скажите. Это не значит что этого нельзя сделать вообще.
Есть такой паттерн проектирования - стратегия называется, с его помощью такое очень легко и красиво реализуется, и без единой директивы условной компиляции. Реализовать его можно как с помощью виртуальных функций, так и на шаблонах. Выбор-же нужной стратегии удобно осуществлять в билд системе.

Сообщение отредактировал neiver - Dec 23 2011, 10:48
Go to the top of the page
 
+Quote Post
sasamy
сообщение Dec 23 2011, 11:10
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(neiver @ Dec 23 2011, 14:45) *
Есть такой паттерн проектирования - стратегия называется, с его помощью такое очень легко и красиво реализуется, и без единой директивы условной компиляции.


А теперь подумай хорошенько - стоит ли применять паттерны проектирования в ООП там где это ну совсем нафик не нужно.
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 23 2011, 14:12
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sasamy @ Dec 23 2011, 15:10) *
А теперь подумай хорошенько - стоит ли применять паттерны проектирования в ООП там где это ну совсем нафик не нужно.
Вам - не нужно. А вменяемые люди применяют rolleyes.gif
Цитата
в шаблонах вы дальше типов не уедете,
Да ну???
Цитата
синтаксис вы не измените
До некоторой степени можно изменить.
Цитата
и то что этот пример может и не совсем удачный ничего не меняет
Это точно, пока вы несете пургу и ни одного удачного примера не привели
Цитата
достаточно внести здесь условную компиляцию например в зависимости от устройства, платформы, конфига добавлять определенный код
Давайте, продемонстрируйте.
Цитата
как ваш "тривиальный" класс превратится в месиво
То, что вы не знаете С++ мы уже поняли, зачем же об этом продолжать так надрывно кричать? smile3046.gif
Цитата
а у меня все будет как прежде ясно и кратко.
Да уж, макросы на пол-страницы - это 'ясно и кратко' laughing.gif
Go to the top of the page
 
+Quote Post
sasamy
сообщение Dec 23 2011, 16:26
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(XVR @ Dec 23 2011, 18:12) *
Это точно, пока вы несете пургу и ни одного удачного примера не привели
Давайте, продемонстрируйте.


http://www.boost.org/
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 23 2011, 18:26
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(sasamy @ Dec 23 2011, 20:26) *
Это вы к чему? Если вы не в курсе, то boost - это С++ библиотека, а не С, как вы видимо по неведению думаете laughing.gif
Go to the top of the page
 
+Quote Post
sasamy
сообщение Dec 23 2011, 18:34
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(XVR @ Dec 23 2011, 22:26) *
Это вы к чему?


Там один клоун пример просил использования макросов - но мне самому что-то не хочется больше писать.

Цитата
Если вы не в курсе, то boost - это С++ библиотека, а не С


Об это даже в заголовке написано по ссылке - не думайте что все кругом совсем дебилы, по себе не судите. Я мог бы вам дать ссылки на исходники ядра Linux где макросы очень эффективно используются - вызововы syscall, микроассемблер для mips и проче но вы же ответите в своем стиле - я это напишу красиво - один класс с парой виртуальных ф-ций при этом не приводя ни строчки своего кода, поэтому я вам дал ссылку на библиотку С++ - можете начать отсюда
http://www.boost.org/doc/libs/1_48_0/libs/.../doc/index.html

Сообщение отредактировал sasamy - Dec 23 2011, 21:17
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Артём_   Вопрос по С++   Dec 13 2011, 17:38
- - neiver   Направление мысли правильное. Фабрика вам в помощь...   Dec 13 2011, 18:38
|- - _Артём_   Цитата(neiver @ Dec 13 2011, 20:38) Если ...   Dec 13 2011, 18:49
|- - neiver   Цитата(_Артём_ @ Dec 13 2011, 22:49) Полу...   Dec 13 2011, 19:12
|- - _Артём_   Цитата(neiver @ Dec 13 2011, 21:12) Нет. ...   Dec 13 2011, 20:07
|- - Сергей Борщ   QUOTE (_Артём_ @ Dec 13 2011, 22:07) Что-...   Dec 13 2011, 21:06
|- - _Артём_   Цитата(Сергей Борщ @ Dec 13 2011, 23:06) ...   Dec 13 2011, 21:37
- - Danis   Цитата(_Артём_ @ Dec 13 2011, 20:38) Созд...   Dec 14 2011, 08:33
|- - neiver   Цитата(Danis @ Dec 14 2011, 12:33) ИМХО, ...   Dec 14 2011, 08:51
|- - _Артём_   Цитата(Danis @ Dec 14 2011, 10:33) ИМХО, ...   Dec 14 2011, 09:35
|- - kolobok0   Цитата(_Артём_ @ Dec 14 2011, 13:35) ..А ...   Dec 14 2011, 10:57
||- - dxp   Цитата(kolobok0 @ Dec 14 2011, 17:57) ну ...   Dec 14 2011, 11:59
||- - kolobok0   Цитата(dxp @ Dec 14 2011, 15:59) ...какие...   Dec 16 2011, 08:23
|||- - ReAl   Цитата(kolobok0 @ Dec 16 2011, 10:23) Лич...   Dec 16 2011, 09:57
||||- - kolobok0   Цитата(ReAl @ Dec 16 2011, 13:57) ...текс...   Dec 17 2011, 21:46
||||- - dxp   QUOTE (kolobok0 @ Dec 18 2011, 04:46) про...   Dec 18 2011, 05:33
|||- - dxp   Цитата(kolobok0 @ Dec 16 2011, 15:23) для...   Dec 16 2011, 19:48
|||- - Danis   Цитата(dxp @ Dec 16 2011, 22:48) А ваши р...   Dec 16 2011, 20:55
|||- - _Артём_   Цитата(Danis @ Dec 16 2011, 22:55) Но дум...   Dec 18 2011, 02:05
|||- - kolobok0   Цитата(_Артём_ @ Dec 18 2011, 06:05) ...Э...   Dec 19 2011, 03:00
|||- - haker_fox   QUOTE (kolobok0 @ Dec 19 2011, 11:00) вес...   Dec 19 2011, 05:34
|||- - dxp   QUOTE (kolobok0 @ Dec 19 2011, 10:00) я л...   Dec 19 2011, 06:05
|||- - kolobok0   Цитата(dxp @ Dec 19 2011, 10:05) ..спасиб...   Dec 19 2011, 09:04
|||- - sonycman   Цитата(kolobok0 @ Dec 19 2011, 13:04) Есл...   Dec 19 2011, 10:12
||- - sasamy   Цитата(dxp @ Dec 14 2011, 15:59) Поясните...   Dec 20 2011, 08:35
||- - dxp   QUOTE (sasamy @ Dec 20 2011, 15:35) Самый...   Dec 20 2011, 09:24
||- - sasamy   Цитата(dxp @ Dec 20 2011, 13:24) Сложный ...   Dec 20 2011, 09:50
||- - demiurg_spb   Я скажу может крамольную вещь и даже кому-то будет...   Dec 20 2011, 10:09
|||- - sasamy   Цитата(demiurg_spb @ Dec 20 2011, 14:09) ...   Dec 20 2011, 10:28
|||- - demiurg_spb   При чём здесь это? Как часто принимаются новые ста...   Dec 20 2011, 10:33
|||- - XVR   Цитата(sasamy @ Dec 20 2011, 14:28) Специ...   Dec 20 2011, 10:44
|||- - sasamy   Цитата(XVR @ Dec 20 2011, 14:44) Не испол...   Dec 21 2011, 08:01
|||- - Сергей Борщ   QUOTE (sasamy @ Dec 21 2011, 10:01) Если ...   Dec 21 2011, 08:12
||||- - sasamy   Цитата(Сергей Борщ @ Dec 21 2011, 12:12) ...   Dec 21 2011, 08:40
||||- - Сергей Борщ   QUOTE (sasamy @ Dec 21 2011, 10:40) хотя ...   Dec 21 2011, 09:57
|||||- - sasamy   Цитата(Сергей Борщ @ Dec 21 2011, 13:57) ...   Dec 21 2011, 11:35
|||||- - XVR   Цитата(sasamy @ Dec 21 2011, 15:35) Идея ...   Dec 21 2011, 11:42
||||||- - sasamy   Цитата(XVR @ Dec 21 2011, 15:42) Писали н...   Dec 21 2011, 19:47
||||||- - ReAl   Цитата(sasamy @ Dec 21 2011, 21:47) Тут к...   Dec 21 2011, 20:09
||||||- - sasamy   Цитата(ReAl @ Dec 22 2011, 00:09) могу то...   Dec 22 2011, 08:30
||||||- - ReAl   Цитата(sasamy @ Dec 22 2011, 10:30) Чего ...   Dec 22 2011, 10:00
||||||- - sasamy   Цитата(ReAl @ Dec 22 2011, 14:00) Это мы ...   Dec 22 2011, 11:20
||||||- - Сергей Борщ   QUOTE (sasamy @ Dec 22 2011, 13:20) Скаже...   Dec 22 2011, 11:39
||||||- - sasamy   Цитата(Сергей Борщ @ Dec 22 2011, 15:39) ...   Dec 22 2011, 11:42
||||||- - dxp   QUOTE Потрудитесь книжки почитать http://www.progr...   Dec 22 2011, 16:19
||||||- - Прохожий   Цитата(dxp @ Dec 22 2011, 20:19) .... ПМС...   Dec 22 2011, 17:53
||||||- - dxp   QUOTE (Прохожий @ Dec 23 2011, 00:53) ПМС...   Dec 23 2011, 05:55
||||||- - Прохожий   Цитата(dxp @ Dec 23 2011, 09:55) Это вряд...   Dec 23 2011, 18:42
||||||- - dxp   QUOTE (Прохожий @ Dec 24 2011, 01:42) Вот...   Dec 24 2011, 06:44
||||||- - sasamy   Цитата(dxp @ Dec 24 2011, 10:44) Если же ...   Dec 24 2011, 08:06
||||||- - Прохожий   Цитата(dxp @ Dec 24 2011, 10:44) Речь идё...   Dec 24 2011, 17:55
||||||- - dxp   QUOTE (Прохожий @ Dec 25 2011, 00:55) Опя...   Dec 25 2011, 04:58
|||||- - haker_fox   QUOTE (sasamy @ Dec 21 2011, 19:35) Абсол...   Dec 21 2011, 11:52
||||- - XVR   Цитата(sasamy @ Dec 21 2011, 12:40) Кстат...   Dec 21 2011, 11:10
||||- - kolobok0   Предлагаю свернуть тему. А то НГ на носу. И страни...   Dec 21 2011, 11:42
|||- - haker_fox   QUOTE (sasamy @ Dec 21 2011, 16:01) http:...   Dec 21 2011, 09:12
|||- - dxp   QUOTE (sasamy @ Dec 21 2011, 15:01) Если ...   Dec 21 2011, 10:07
|||- - ReAl   Цитата(sasamy @ Dec 21 2011, 10:01) По су...   Dec 21 2011, 12:12
|||- - dxp   QUOTE (ReAl @ Dec 21 2011, 19:12) И тогда...   Dec 21 2011, 13:23
||||- - Genadi Zawidowski   Цитата(dxp @ Dec 21 2011, 17:23) Это был ...   Dec 22 2011, 12:50
|||- - sasamy   Цитата(ReAl @ Dec 21 2011, 16:12) А дальш...   Dec 21 2011, 17:10
||- - Сергей Борщ   QUOTE (sasamy @ Dec 20 2011, 11:50) Приме...   Dec 20 2011, 10:59
|||- - ViKo   Цитата(Сергей Борщ @ Dec 20 2011, 13:59) ...   Dec 20 2011, 11:13
||- - dxp   QUOTE (sasamy @ Dec 20 2011, 16:50) Это о...   Dec 20 2011, 11:14
|- - Danis   Цитата(_Артём_ @ Dec 14 2011, 12:35) В см...   Dec 16 2011, 09:28
- - Iptash   С++ я бы сказал совершенно другой, отличный от С я...   Dec 18 2011, 13:24
|- - dxp   QUOTE (Iptash @ Dec 18 2011, 20:24) С++ я...   Dec 18 2011, 16:58
|- - Iptash   Цитата(dxp @ Dec 18 2011, 20:58) ... Наве...   Dec 18 2011, 17:12
- - haker_fox   Господа, может быть не будем заниматься поддержани...   Dec 20 2011, 09:58
- - ViKo   Я не знаю языка C++, хотя и прочитал Г. Шилдта до ...   Dec 20 2011, 10:42
- - Сергей Борщ   QUOTE (ViKo @ Dec 20 2011, 13:13) А я вот...   Dec 20 2011, 12:43
|- - ViKo   Цитата(Сергей Борщ @ Dec 20 2011, 15:43) ...   Dec 20 2011, 12:50
|- - haker_fox   QUOTE (Сергей Борщ @ Dec 20 2011, 20:43) ...   Dec 20 2011, 13:54
- - Flexz   Цитата(sasamy @ Dec 21 2011, 12:01) По су...   Dec 21 2011, 08:34
- - Flexz   Видимо, он имел ввиду единый, общий для разных ком...   Dec 21 2011, 09:36
- - ReAl   1) На ассемблере+фортране в своё время было написа...   Dec 21 2011, 19:38
- - toweroff   sasamy, вот у меня в соседней ветке конкретный во...   Dec 21 2011, 20:11
|- - neiver   Цитата(sasamy @ Dec 23 2011, 15:10) А теп...   Dec 23 2011, 11:26
|- - XVR   Цитата(sasamy @ Dec 23 2011, 22:34) Там о...   Dec 24 2011, 16:52
|- - sasamy   Цитата(XVR @ Dec 24 2011, 20:52) проявляя...   Dec 24 2011, 17:06
||- - XVR   Цитата(sasamy @ Dec 24 2011, 21:06) Это в...   Dec 24 2011, 17:12
|- - sasamy   Цитата(XVR @ Dec 24 2011, 20:52) Не надо,...   Dec 24 2011, 18:17
|- - neiver   Цитата(sasamy @ Dec 24 2011, 22:17) А о ч...   Dec 24 2011, 20:31
|- - sasamy   Цитата(neiver @ Dec 25 2011, 00:31) Очень...   Dec 24 2011, 21:20
|- - neiver   Цитата(sasamy @ Dec 25 2011, 01:20) Для в...   Dec 25 2011, 07:43
- - ViKo   А за сайтик http://www.programmer-lib.ru - спасибо...   Dec 22 2011, 17:11
- - Сергей Борщ   QUOTE (sasamy @ Dec 22 2011, 13:42) Потру...   Dec 23 2011, 08:55
- - Flexz   Цитата(sasamy @ Dec 23 2011, 22:34) ...мо...   Dec 24 2011, 11:32
|- - sasamy   Цитата(Flexz @ Dec 24 2011, 15:32) Осталь...   Dec 24 2011, 12:09
- - Flexz   Цитата(sasamy @ Dec 24 2011, 16:09) Ищите...   Dec 24 2011, 15:12
2 страниц V   1 2 >


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 19:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.017 секунд с 7
ELECTRONIX ©2004-2016