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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строковый параметр или много параметров 
:(
    Опции темы
 
Что вы выберите?
foo("host: 192.168.0.2:3456, user=i pass=***, etc"); [ 4 ]  [23.53%]
foo("192.168.0.2", "3456", "i", "***", "etc"); [ 13 ]  [76.47%]
Всего проголосовавших: 17
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
vinter
Дата 5.12.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



у меня возник небольой спор, выберите, то, что вы бы использовали в своем проекте. Комментарии приветсвуются.
Заранее спасибо.


--------------------
Мой блог
PM MAIL WWW   Вверх
Alek86
Дата 5.12.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



vinter, ответ "создам структуру(класс)" не принимается?

с помощью класса можно будет передавать оба варианта (в конструкторах) и в том же конструкторе можно будет проверить "правильность" данных
+ это может очистить код и ускорить работу проги (так как часто проверки на "правильность" данных дублируются в каждой из функций)


--------------------
user posted image    user posted image
PM MAIL   Вверх
ama_kid
Дата 5.12.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



имхо, очень сильно зависит от формализованности и законченности списка параметров. Если список параметров четко оговорен и типизирован - тогда предпочту параметры раскидать. Если же преполагается плавающий механизм списка параметров (а особенно, если etc подразумевает неоконченный и неизвестный на момент разработки хвост) - тогда лучше строкой...
Цитата(Alek86 @  5.12.2008,  18:28 Найти цитируемый пост)
ответ "создам структуру(класс)" не принимается?
Создавать класс ради сиюминутной единичной задачи - не всегда оправдано.  smile Хотя как вариант...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Alek86
Дата 5.12.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ama_kid, я и не говорю, что всегда нужно делать так
точнее я имел в виду, что так нужно делать только в случае достаточно больших прог

но в вопросе о "сиюминутности" ничего не говорится, потому я предложил еще 1 вариант.


--------------------
user posted image    user posted image
PM MAIL   Вверх
vinter
Дата 5.12.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(Alek86 @  5.12.2008,  18:28 Найти цитируемый пост)
vinter, ответ "создам структуру(класс)" не принимается?

нет smile


--------------------
Мой блог
PM MAIL WWW   Вверх
vinick
Дата 5.12.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если нет объективных причин, то предпочту второй вариант. Т.к. лень парсить строку smile
PM MAIL ICQ Jabber   Вверх
mes
Дата 5.12.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



выбрал второй вариант, однако в таком виде : 
foo ("192.168.0.2:3456", "i  ***","etc") ;

каждая строка представляет собой определенную структуру, предназначенную для хранения данных для определенной задачи.
т.е конечный вид функции условно такой
Код

login (const string& host, const string& identify_data, const string& etc)
{
       sock.Connect (host);
       if ( sock.WaitConnect ()== eOK) sock.Send ("IDENTIFY "+identify_data);
       .. 
}

имхо парсить строку меж этих задач (Connect  и SendIdentify) , да и так же применять один и тот же вид "протокола" хранения данных для каждой задачи на мой взгляд нецелесообразно.


Это сообщение отредактировал(а) mes - 5.12.2008, 19:07


--------------------
PM MAIL WWW   Вверх
shara
Дата 5.12.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



просто лень разбирать строку


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
Lazin
Дата 5.12.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



я бы создал класс ip::tcp::endpoint, для хоста, и класс auth::user для имени-пароля и передавал бы их, это технологичней smile 
PM MAIL Skype GTalk   Вверх
vinter
Дата 5.12.2008, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



народ вы на названия переменных не заморачивайтесь, это просто пример smile


--------------------
Мой блог
PM MAIL WWW   Вверх
Lazin
Дата 5.12.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



ну ты меня понял, текстовая строка это текстовая строка, тем более если она получена откуда-то извне. она должна пройти какую-то валидацию, потом должна быть проанализирована, а потом на ее основе должны быть созданы объекты, с которыми работает программа. 
Но если ф-я о которой идет речь это ф-я, которая и должна создать эти объекты, то лучше передавать одну строку, так-как это эффективней(меньше фрагментация памяти, меньше разных участков памяти должно быть загружено в кэш), плюс, одно строку можно целиком обработать регулярным выражением smile 
PM MAIL Skype GTalk   Вверх
vinter
Дата 6.12.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



ну с точки зреняи эффективности первый вариант в любом случае проигрывает:
1. В С++ нет регулярных, а значит надо писать свой парсер, или юзать boost(который тоже не Святым Духом питается).
2. Парсинг это затраты, и эти затраты куда больше, чем затраты на фрагментацию(сомневаюсь, что она будет иметь место), к тому же я думаю лежать то они как раз убдут так же как и цельная строка, не вижу причин компилятору поступить по другому.


--------------------
Мой блог
PM MAIL WWW   Вверх
Lazin
Дата 6.12.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(vinter @  6.12.2008,  00:07 Найти цитируемый пост)
1. В С++ нет регулярных, а значит надо писать свой парсер, или юзать boost(который тоже не Святым Духом питается).

ну если нужно получить в результате не строку, а скажем число, то парсить все-равно будет нужно

Цитата(vinter @  6.12.2008,  00:07 Найти цитируемый пост)
2. Парсинг это затраты, и эти затраты куда больше, чем затраты на фрагментацию(сомневаюсь, что она будет иметь место), к тому же я думаю лежать то они как раз убдут так же как и цельная строка, не вижу причин компилятору поступить по другому. 

строки в памяти размещает не компилятор а менеджер памяти, представь что у тебя over 9000 таких строковых параметров, думаешь фрагментации не будет?
хотя на самом деле это не важно в 99.9% случаев, нужно руководствоваться логикой работы программы, в одном месте более правильным может быть 1-й вариант в другом 2-й
PM MAIL Skype GTalk   Вверх
vinter
Дата 6.12.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(Lazin @  6.12.2008,  01:15 Найти цитируемый пост)
строки в памяти размещает не компилятор а менеджер памяти

разве в данном случе все не будет просто лежать последовательно в стеке?

Цитата(Lazin @  6.12.2008,  01:15 Найти цитируемый пост)
в одном месте более правильным может быть 1-й вариант в другом 2-й

ага


--------------------
Мой блог
PM MAIL WWW   Вверх
Alek86
Дата 6.12.2008, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(vinter @  6.12.2008,  00:19 Найти цитируемый пост)
разве в данном случе все не будет просто лежать последовательно в стеке?

как повезет
стандарт не гарантирует, что строки
Код
"ddd", "dsd";

будут лежать последовательно


--------------------
user posted image    user posted image
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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