![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
Подскажите пож-та каким образом верно определить различную реализацию одной и той же функции в зависимости от значения внешней переменной (parametr)? Проверять значение parametr внутри функции Func1 и в зависимости от его значения выполнять те или другие операторы нежелательно, так как эта функция вызывается сотни раз и каждый раз проверять значение parametr нет смысла – оно одно и тоже, равное заданному в начале программы…
я делаю что-то типа:
будет конечно же ошибка, так как условие для #if должно быть константным (const), но у меня-то это значение (parametr) считывается из файла в начале программы (то есть параметр parametr переменен)…как быть? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
язык си или с++ ? в любом случае если нужна зависимость от рантаймовской переменной и нельзя чтоб функция вызывалась по указателю в цикле, то придется делать циклы для каждого из значений... |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
язык С++ - пишу в Qt 4.6....
то есть только так:
что , опять же, нежелательно... или что Вы имели ввиду? подскажите программно пож-та... |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Используй функторы
Для создания функтора можно использовать паттерн Абстрактная фабрика Это сообщение отредактировал(а) Cheloveck - 25.11.2010, 21:54 -------------------- ![]() |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
Cheloveck: это явно не самый простой способ - функторы, дополнительные классы для каждой функции...надо как-то проще...гораздо проще...
|
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
тогда указатели...
Это сообщение отредактировал(а) Cheloveck - 25.11.2010, 22:13 -------------------- ![]() |
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
а почему так не работает:
если parametr = 1; то все работает, при parametr = 2 (например); не срабатывает #else #define Func1(x) ( x ) - ошибок нет, но в эдит ничего не выводится.... почему и как это испрaвить? Это сообщение отредактировал(а) gordmiand - 25.11.2010, 22:41 |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Это то, что препроцессор передаёт компилятору
Добавлено через 2 минуты и 8 секунд Почитай про препроцессор. Такого делать вообще нельзя. Препроцессор не работает в рантайме, только при компиляции. -------------------- ![]() |
|||
|
||||
| gordmiand |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
Cheloveck: почему нельзя делать
почему же тогда
отлично и верно сработает #else...но это если РУКАМИ закомментировать #define Flag - весь вопрос и состоит в том как программно задавать/не задавать #define Flag... в любом случае Вашими способами очень сложно...мой данный пример можно как-то подкрутить до верного? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
|
|||
|
||||
| gordmiand |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 15.4.2007 Репутация: нет Всего: 0 |
mes : первые 2 строки понятны - определение функций fn1 и fn2... а вот что делается в третьей строке? когда вызывается функция fn1, а когда - fn2? поясните пож-та....
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если параметр == true (!=0) то указатель pfn инициализируется адресом fn1, иначе fn2;
в последний строчке идет вывод в консоль результата функции.. Добавлено @ 23:31 можно переписать так
Это сообщение отредактировал(а) mes - 25.11.2010, 23:31 |
|||
|
||||
| Cheloveck |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
gordmiand, способ mesа такой же, как мой последний, только требует глобальной переменной. Объекты же сами хранят своё состояние, а ведь именно это вам и надо. Если это для вас сложно, может не стоит писать на C++?
Потому, что директивы препроцессора должны начинаться с символа #, и их (директив) не должно быть более одного на строку. Это сообщение отредактировал(а) Cheloveck - 26.11.2010, 10:22 -------------------- ![]() |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Это либо то, что ТС хочет избежать, либо глобальная переменная, либо дополнительный параметр. -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |