Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перегруженные функции 
:(
    Опции темы
tofreesky
Дата 20.7.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Как лучше поступить?

Изначально есть одна функция с тремя аргументами.

void func(DWORD arg1, DWORD arg2, DWORD arg3)
{

}

Каждый из аргументов должен быть, либо числом либо указателем на char строку.

Не использовать же девять перегруженных функций? Как лучше поступить?
Проверять входящий аргумент на возможность указателя?
PM MAIL   Вверх
djamshud
Дата 20.7.2010, 12:40 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Например можно так:

Код

struct some{
int type;
union{
size_t data;
char *ptr;}value;
};


Передавать три аргумента struct some и по type смотреть, что это. Еще можно отказаться от велосипедика и воспользоваться variant-ами. Еще вариант - пересмотреть структуру программы.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
azesmcar
Дата 20.7.2010, 12:50 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



используй шаблоны
PM   Вверх
tofreesky
Дата 20.7.2010, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Цитата(azesmcar @ 20.7.2010,  12:50)
используй шаблоны

Можно пример? Еще не работал с этим.
PM MAIL   Вверх
Abyx
Дата 20.7.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



Цитата(tofreesky @  20.7.2010,  12:31 Найти цитируемый пост)
Проверять входящий аргумент на возможность указателя? 

для чисел можно выставлять старший разряд (или делать число отрицательным), у указателей он всегда равен нулю

Добавлено через 43 секунды
Цитата(tofreesky @  20.7.2010,  13:02 Найти цитируемый пост)
Можно пример?

пример зависит от тела функции
PM MAIL   Вверх
djamshud
Дата 20.7.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Шаблоны слабо помогут, когда возможна куча сочетаний разнотипных параметров с различной логикой их обработки.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
azesmcar
Дата 20.7.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(djamshud @  20.7.2010,  13:06 Найти цитируемый пост)
Шаблоны слабо помогут, когда возможна куча сочетаний разнотипных параметров с различной логикой их обработки. 

если логика различна - тогда можно использовать специализацию..в общем-то
Цитата(Abyx @  20.7.2010,  13:04 Найти цитируемый пост)
пример зависит от тела функции 


не понятно как именно должны обрабатываться эти параметры, одинаково или по разному?
PM   Вверх
djamshud
Дата 20.7.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 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
PM   Вверх
azesmcar
Дата 20.7.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(djamshud @  20.7.2010,  13:10 Найти цитируемый пост)
Все случаи специализировать? 

а что, для всех нужно разное поведение? тогда да, нужно же где-то это поведение описать, хотя в таком случае шаблоны и не нужны, обычная перегрузка вполне сойдет.
PM   Вверх
djamshud
Дата 20.7.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
azesmcar
Дата 20.7.2010, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(djamshud @  20.7.2010,  13:20 Найти цитируемый пост)
Если я правильно понял, у человека три параметра, каждый из которых может реально быть двух типов - инт и указатель на строку. Что перегрузки, что специализация шаблонов - это куча копипасты. 

если человеку нужно 9 разных поведений функции то их придется писать, в функциях, в if-е, в switch-case, как угодно, не важно, а в другом случае шаблоны помогут избежать ненужных перегрузок (точнее сгенерируют их сами).
PM   Вверх
djamshud
Дата 20.7.2010, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



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


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
boostcoder
Дата 20.7.2010, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



при использовании boost.mpl, порядок аргументов не имеет значения.
PM WWW   Вверх
mrbrooks
Дата 20.7.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



boostcoder, ога. при условии что, TC не знаком с шаблонами, я уже угадываю следующий его вопрос.
PM MAIL   Вверх
boostcoder
Дата 20.7.2010, 13:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



...и с boost.fusion тоже

Добавлено @ 13:46
Цитата(mrbrooks @  20.7.2010,  13:42 Найти цитируемый пост)
ога. при условии что, TC не знаком с шаблонами, я уже угадываю следующий его вопрос.

собственно этот ответ адресован azesmcar и djamshud. спорят ни о чем smile

Добавлено через 8 минут и 34 секунды
Цитата(azesmcar @  20.7.2010,  13:22 Найти цитируемый пост)
если человеку нужно 9 разных поведений функции то их придется писать, в функциях, в if-е, в switch-case, как угодно, не важно, а в другом случае шаблоны помогут избежать ненужных перегрузок (точнее сгенерируют их сами).

так держать! рационально мыслите.


djamshud, немного проанализировав ваши посты, пришел к умозаключению, что ваш стиль написания кода, называется "Си с классами." прям 90еы..ужос.. smile 

Это сообщение отредактировал(а) boostcoder - 20.7.2010, 13:46
PM WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1108 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.