![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
||
|
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Здравствуйте, ни у кого не возникало ощущения куцести плюсового препроцессора? У меня, например, периодически возникают случаи, когда его возможностей определенно хватает. Вот один из них. Стандартный случай, когда нужны методы с различными правам доступа ко внутренним переменным. Приходится писать кучу одинакового кода. Данный пример для двух переменных, и то разница уже видна, а что будет когда их число приблизится, например, к 10?
Этот случай не первый и не единственный, хотелось бы послушать общество. Заранее спасибо |
|||
|
||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
в целом хватает
хотя препроцессор GAS (Gnu Assembler) по-лучше будет я бы добавил 1. Перегрузку макрофункций
2. Циклы
где __ITERATION__ - номер текущей итерации (0, 1, 2, ...) 3. Внутренние макродирективы
Это сообщение отредактировал(а) MAKCim - 17.5.2007, 19:30 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Совершенству нет предела.
В целом - устраивает, для меня это далеко не самая важная часть программирования. Добавить функциональность, о которой говорится в начале темы - можно, конечно... вот только, для начала, предложите для нее синтаксис. |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
ИМХО возможностей у препроцессора вполне достаточно, и даже они обычно не используются, потому что в С++ есть много способов сделать то же самое проще/лучше/удобнее. См. например шаблоны.
Насчет твоего примера, можно сделать например так:
Хотя сам способ доступа к приватным полям через ссылку мне не нравится, имхо раз уж на то пошло, так лучше сделать геттер/сеттер, а вообще поищи тут в разделе наверно есть куча дискуссий на тему хорошо ли использовать геттеры/сеттеры. Есть еще примеры? -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Проще пропускать сорсы через какой-нибудь шаблонизатор, чем ждать пока сделают изменения в препроцессоре. Например так как поступает Trolltech.
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Это же надо, MAKCim, Максим прочитал мои мысль, пока я ее писал... Возможно, и неплохо было бы. Правда, для себя не помню случаев, чтобы такие штуки мне понадобились. Хотя, без сомнения, кому-то понадобится может. |
|||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
Hurricane |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 126 Регистрация: 10.4.2007 Репутация: 6 Всего: 9 |
Daevaorn, ты тоже мыслечитатель?
![]()
Первая мысль была именно такая. Добавлено через 4 минуты и 37 секунд Кстати, а почему нет варианта "В препроцессоре и так много лишнего, сократить до минимума". А то начинаешь юзать всякие темплейтные min/max/swap, а какой-то умник их уже через дефайны переопределил. И начинаешь чесать репу, лихорадочно соображая что сделал не так. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
![]() Daevaorn, прикольное число сообщений у тебя 1234 ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
ИМХО, основной недостаток препроцессора в том, что он не разбирается в том, что обрабатывает (ну разве что не трогает строки и не обрабатывает max в max1)
в этом смысле шаблоны более "встроены в язык", хотя и возможностей местами поменьше так что, возможно, было бы неплохо, как-то сближать эти два инструмента... -------------------- qqq |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Собственно шаблоны и есть аналогом препроцессора, просто шаблоны не являются препроцессором по определению )
|
|||
|
||||
jonie |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
о чем Вы?! вам мало "приятных" и незаметных вещей что дает вам препроцессор?)
кстати можете себя проверить.. код даст 50 (а вот на старых компиляторах может дать и не 50)... смех смехом а я как-то часа 4 искал такую "ошибку" (не в своем коде).... уж никак не пологал что сделан будет макрос... вот чего в голву не пришло, того не пришло) --------------------- все эти намудреные препроцессорные директивы выливаются в полную мешанину и панику при отладке (нее дай вам столкнуться с ошибкой неявной в большом макросе)... ------------------
приведенный пример хоть и встречается, но редко....тем более что если массив такой локальный то ничего хорошего не будет из той инициализации ... ---------------- в общем говоря о "плюсах" не стоит забывать и о минусах....а хочется гуд препроцессор какй вам надо так есть perl ....)) пишите и травите на свои исходники.... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||||
|
|||||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
nickless,
Предложенный вами вариант, конечно, упрощает, но тем не менее нужно для каждого члена класса писать вызов макроса. Насчет шаблонов полностью согласен, но они не обеспечивают возможность перечисления членов структуры (или я не знаю как это сделать). Еще один случай, когда это было бы удобно. Например, есть текстовый файл, из которого нужно считать структуру. В случае возможности перечисления можно было бы написать подобный код (данный пример призван показать полезность перечисления, поэтому, пожалуйста, не обращайте внимания на контроль ошибок и проч.):
|
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Кстати вариант то правильный ![]() Если хочется поизвращаться - советую посмотреть ещё на boost::preprocessor. Я толком не смотрел, но если не ошибаюсь циклы там есть. Правда, наверно, с ограниченным количеством итераций (просто не представляю как сделать, юзаю лишь существующие возможности, по-другому). А вообще шаблоны для кого придумывали? ![]() |
|||
|
||||
Jcs |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 1.10.2003 Репутация: нет Всего: нет |
Наверное, вопрос был поставлен не совсем корректно. Правильней было бы спросить - устраивают ли Вас возможности метапрограммирования с С++? Тогда сюда автоматом войдут и шаблоны, и макро. Думаю функциональность шаблонов тоже есть куда расширять. Например в книге "шаблоны. Спавочник пользователя" говорится о возможности включения именованных аргументов шаблонов. Я бы еще добавил частичную специализацию по количеству шаблонных аргументов.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |