![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| w4nderer |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 21.8.2007 Репутация: нет Всего: нет |
Товаристчи.
Вопрос такого плана - можно ли создать макрос, кот принимал бы значение по умолчанию?
|
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: 3 Всего: 8 |
Думаю что нет, да и зачем?.....
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
А нельзя разве что-то такое
или такое
замутить? Прошу ногами не бить, я уже подзабыл препроцессор. |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Dims,
Видимо, нет. Двух макросов с одинаковыми именами вроде бы не может быть. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
можно так извратиться
правда тут используются макрос с переменным числом аргументов (С99) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
А можно две последние инлайн функции без первого дефайна написать?
В принципе инлайн функция по сути то же дэфайн. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
можно и не использовать тогда не будет гарантии, что функции будут на самом деле inline -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
я же не говорю, что это очень плохо Понятно, что отказ можеть спровоцированный отказ от инлайн, если компилятор не с той ноги встанет... |
|||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Решение безусловно жестко и поучительно. А если мы этот изврат усугубим. Была когда-то у меня такая проблема. Хотел передать в дэфайне неопределенное количество параметров, но для построения класса, для использования, скажем в конструкторе. Ну это вроде класса, что приведу сейчас из работающего примера.
#define IMPLIMENT_SERIALIZE(TYPE) \ class Creator##TYPE : public Creator \ { \ public: \ Creator##TYPE(string type = #TYPE):Creator(type) \ { \ Registrator * pReg = Registrator::getInstance(); \ pReg->registrate(#TYPE, this); \ } \ Streamable * createObject() const { return new TYPE; } \ }; \ string TYPE::getType() const{return #TYPE;}\ Creator##TYPE _Creator##TYPE; Но если пример будет посложнее, если присутствует конструктор типа Creator##TYPE ( int i = 0, char b = '\0') {......} Есть ли возможность не только создать класс, скажем CreatorPersonStreamable, но и инициализировать его определенныйми значениями ? Это сообщение отредактировал(а) Random13 - 5.12.2007, 14:47 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
В С++ макросы часто можно заменить константами, inline функциями, шаблонами
#define MY_FUNC(a,b/*=value*/ (func(a,b);) можно заменить на template <typename T, typename U> inline MY_FUNC (const T& a, const U& b = value) { func (a,b); } "изврат" можно попробовать победить примерно так: template <typename TYPE> class Creator { public: Creator (string type = typeid(TYPE).name() ); ..... }; конечно, не все макросы можно разрулить подобным образом, но - большинство. Это сообщение отредактировал(а) baldina - 5.12.2007, 22:27 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
да. Но, как правило, макросы нужны именно тогда, когда inline-функции и шаблоны уже не устроят |
|||
|
||||
| Random13 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Вопрос был не совсем о том. В темплейте можно сделать неизвестным тип, в инлайн функцию передать константу, ну или переменную соответствующего типа. В макросе может быть и то и это. Если задано точное количество неизвестных параментров, то это можно разрулить. И было красиво разрулен макрос-функция с переменным числом параметров. А тут вопрос как бы разрулить класс, передавая ему тип и несколько констант(переменное количество) для инициализации... |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
> А тут вопрос как бы разрулить класс, передавая ему тип и несколько констант(переменное количество) для инициализации...
Сорри. Теперь вопрос понятен. Да дело нелегкое. Кое-что (на задачку конкретную глянуть надобно) видимо можно сделать при помощи MPL, но врядли игра стоит свеч. Моя практика показывает, что часто (не всегда, но - часто) решается сменой дизайна. Все гениальное просто, все сложное - не гениально. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |