![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Как лучше поступить?
Изначально есть одна функция с тремя аргументами. void func(DWORD arg1, DWORD arg2, DWORD arg3) { } Каждый из аргументов должен быть, либо числом либо указателем на char строку. Не использовать же девять перегруженных функций? Как лучше поступить? Проверять входящий аргумент на возможность указателя? |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Например можно так:
Передавать три аргумента struct some и по type смотреть, что это. Еще можно отказаться от велосипедика и воспользоваться variant-ами. Еще вариант - пересмотреть структуру программы. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
используй шаблоны
|
|||
|
||||
tofreesky |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 9.6.2010 Репутация: нет Всего: нет |
Можно пример? Еще не работал с этим. |
|||
|
||||
Abyx |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 1 Всего: 10 |
для чисел можно выставлять старший разряд (или делать число отрицательным), у указателей он всегда равен нулю Добавлено через 43 секунды пример зависит от тела функции |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Шаблоны слабо помогут, когда возможна куча сочетаний разнотипных параметров с различной логикой их обработки.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
если логика различна - тогда можно использовать специализацию..в общем-то не понятно как именно должны обрабатываться эти параметры, одинаково или по разному? |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
char*. int, int
int, char*, char* char*, int, char* ... Все случаи специализировать? -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Если я правильно понял, у человека три параметра, каждый из которых может реально быть двух типов - инт и указатель на строку. Что перегрузки, что специализация шаблонов - это куча копипасты.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
если человеку нужно 9 разных поведений функции то их придется писать, в функциях, в if-е, в switch-case, как угодно, не важно, а в другом случае шаблоны помогут избежать ненужных перегрузок (точнее сгенерируют их сами). |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Поведение то одинаковое. Просто входные данные разнотипные. И шаблон с восемью специализациями только ради описания входного типа - жесточайший оверхед в плане кодонаписания.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
при использовании boost.mpl, порядок аргументов не имеет значения.
|
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
boostcoder, ога. при условии что, TC не знаком с шаблонами, я уже угадываю следующий его вопрос.
|
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
...и с boost.fusion тоже
Добавлено @ 13:46
собственно этот ответ адресован azesmcar и djamshud. спорят ни о чем ![]() Добавлено через 8 минут и 34 секунды так держать! рационально мыслите. djamshud, немного проанализировав ваши посты, пришел к умозаключению, что ваш стиль написания кода, называется "Си с классами." прям 90еы..ужос.. ![]() Это сообщение отредактировал(а) boostcoder - 20.7.2010, 13:46 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |