Модераторы: 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   Вверх
Lazin
Дата 6.12.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



я глядя на этот код
Цитата(mes @  5.12.2008,  19:02 Найти цитируемый пост)
login (const string& host, const string& identify_data, const string& etc)

представлял себе std::string smile 
PM MAIL Skype GTalk   Вверх
mes
Дата 6.12.2008, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Lazin @  6.12.2008,  00:36 Найти цитируемый пост)
представлял себе std::string smile  

ну и что это меняет ? уж не то, что не хватает ..c_str() ? надеюсь все таки, что сомнения вызвало что то другое,  ибо нигде не говорится, что упомянутая реализация класса объекта sock принимает что то иное, нежели string  smile

Добавлено через 7 минут и 46 секунд
Цитата(vinter @  5.12.2008,  23:50 Найти цитируемый пост)
народ вы на названия переменных не заморачивайтесь, это просто пример smile 

тогда ответить на Ваш вопрос невозможно, потому что выбор способа зависит от контекста конкретной задачи..


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.3.2007
Где: Россия, Омск

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



Не тема, а сплошной творческий онанизм.
Звыняйте - не здержался  smile 
PM MAIL   Вверх
vinter
Дата 6.12.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата(mes @  6.12.2008,  02:52 Найти цитируемый пост)
тогда ответить на Ваш вопрос невозможно, потому что выбор способа зависит от контекста конкретной задачи..

это почему это? название парметров дела не меняет, дело в передаче параметров а не их последущей обработке. Главное что внутри функции они используются раздельно и все. Остальное не важно.


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


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


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

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



Цитата(vinter @  6.12.2008,  09:13 Найти цитируемый пост)
название парметров дела не меняет, дело в передаче параметров а не их последущей обработке.. 

Само название дела не меняет,  но смысл несенный параметром для конкретной функции меняет.  

Цитата(vinter @  6.12.2008,  09:13 Найти цитируемый пост)
Главное что внутри функции они используются раздельно и все. Остальное не важно. 

Это далеко не главное. Каждый параметр является самостоятельной сущностью и от того насколько правильно Вы ее определите будет зависть логичность архитектуры вашей функции. Некоторое время назад поднимался вопрос, что лучше передавать : много одиночных параметров или одну структуру ?
Я придерживаюсь мнения, ответ лежит по середине, т.е
1  я не согласен с упаковкой в структуру, ради упаковки
2. я не согласен с расскрытой передачей, т.е когда один смысловой параметр представлен набором одиночных.
т.е. Кесарю - кесарево.

От вашего вопроса отличается только тем, что у Вас структура является представлена строкой. Поэтому смотрите в суть параметра и будет Вам ответ . smile


P.S. Все вышенаписанное ИМХО.



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


Explorer
****


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

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



mes, для меня ответ очевиден, я поэтому не создал вопрос , а создал голосование, так что я не ищу ответа, мне интересны мнения. Спасибо всем отвечающим.


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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



первый вариант
парсинг не сложный, если строка не хаотична, а имеет определенную структуру, к примеру
"<key1>=<value1>;<key2>=<value2>"



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
jonie
Дата 6.12.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



парсинг мб и не сложный... вона в sendmail тоже не сложный парсинг, а багов было и есть тонны... 
где парсинг - там всегда гемморой. Упаковать в общем в структуру и передавать ссылку на ее - мой выбор.
Во вторых будет делаться давжды работа в первом варианте (часто) : сначала склейка, потом парсинг. зачем?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
JackYF
Дата 6.12.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



При прочих равных - вариант №2.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 6.12.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(jonie @  6.12.2008,  14:04 Найти цитируемый пост)
где парсинг - там всегда гемморой

не согласен, спорить не буду


Цитата(jonie @  6.12.2008,  14:04 Найти цитируемый пост)
Упаковать в общем в структуру и передавать ссылку на ее - мой выбор.

в таком случае мы сделаем функцию зависимой от конкретных параметров
т. е, к примеру есть стек функций L1->L2->L3->...->Ln
L1 генерирует набор параметров, которые последовательно должны быть обработаны L2, L3, ..., Ln
что лучше
делать толстую структуру со всеми возможными параметрами или передавать строку, из которой каждая функция выберет нужные параметры?
кроме того, а если каждый  следующий уровень динамически генерирует параметры для следующего уровня?
тогда L1 должна невольно знать об их существовании, а это лишняя связанность

Добавлено через 2 минуты и 9 секунд
Цитата(jonie @  6.12.2008,  14:04 Найти цитируемый пост)
Во вторых будет делаться давжды работа в первом варианте (часто) : сначала склейка, потом парсинг. зачем? 

унификация представления



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
mes
Дата 6.12.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(MAKCim @  6.12.2008,  15:00 Найти цитируемый пост)

не согласен, спорить не буду

согласен, парсер не такая деталь которую стоит бояться. Другой вопрос что статическая проверка , гораздо безопаснее, чем простое динамическое использование данных,
но иногда бывает необходимым использование динамических структур. Если такой подход преобладает, то Cpp/С ИМХО неправильно выбран как целевой язы


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


В чистом виде оба варианта плохи.


Это сообщение отредактировал(а) mes - 6.12.2008, 16:44


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


Explorer
****


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

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



если уж заговорили о структурах: если у нас параметры вида 
Цитата(MAKCim @  6.12.2008,  14:12 Найти цитируемый пост)
"<key1>=<value1>;<key2>=<value2>"

то, по моему, идеальный вариант параметров ф-ии это vector<pair<string,string>>. И никакие парсинги и структуры даром не нужны...


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


Эксперт
****


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

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



Цитата(vinter @  6.12.2008,  17:24 Найти цитируемый пост)
то, по моему, идеальный вариант параметров ф-ии это vector<pair<string,string>>. И никакие парсинги и структуры даром не нужны... 

тогда уж лучше std::map<std::string, std::string>  smile 
PM MAIL Skype GTalk   Вверх
mes
Дата 6.12.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(vinter @  6.12.2008,  17:24 Найти цитируемый пост)
то, по моему, идеальный вариант параметров ф-ии это vector<pair<string,string>>. И никакие парсинги и структуры даром не нужны... 

а сохранение в файл ? a передача данных между инстанциями ?  smile  все зависит от требований задачи )

Это сообщение отредактировал(а) mes - 6.12.2008, 18:11


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


Explorer
****


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

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



Цитата(Lazin @  6.12.2008,  18:56 Найти цитируемый пост)
тогда уж лучше std::map<std::string, std::string>

не, вдруг сортировка лишнее?

Цитата(mes @  6.12.2008,  19:11 Найти цитируемый пост)
а сохранение в файл ? a передача данных между инстанциями ?

и что не так?


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


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


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

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



Цитата(vinter @  6.12.2008,  18:22 Найти цитируемый пост)

и что не так? 


про хранение :  загрузить данные в ассоциативный контейнер без парсера проблематично  smile .
про передачу: то что реализация вектора (и других стл контейнеров) компиляторно зависимая и передавать их как параметры другой инстанции (из под другого компилятора) чревато сбоем.

Цитата(Lazin @  6.12.2008,  17:56 Найти цитируемый пост)
И никакие ... структуры даром не нужны... 

А заодно лишаемся статического контроля типов  smile 

P.S. у любого способа есть свои недостатки и преимущества, и нужно просто стараться найти оптимальное решение.  smile 



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


Explorer
****


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

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



Цитата(mes @  6.12.2008,  19:37 Найти цитируемый пост)
про хранение :  загрузить данные в ассоциативный контейнер без парсера проблематично  

моя твоя не понимать, у нас есть данные. Отдельно каждая строка, зачем нам парсер?

Цитата(mes @  6.12.2008,  19:37 Найти цитируемый пост)
про передачу: то что реализация вектора (и других стл контейнеров) компиляторно зависимая и передавать их как параметры другой инстанции (из под другого компилятора) чревато сбоем.

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


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


Эксперт
***


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

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



Цитата(vinter @  6.12.2008,  18:47 Найти цитируемый пост)
если я не ошибаюсь, то по стандарту вектор обязан лежать одним куском в памяти

не ошибаешься
точнее не вектор, а буфер, на который он показывает

Цитата(vinter @  6.12.2008,  18:47 Найти цитируемый пост)
, а значит ни о каких сбоях речи быть не может.

ошибаешься

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


vinter, вот видишь, что такое нечетко заданный вопрос smile
уже и в проблемы с либами полезли smile

Это сообщение отредактировал(а) Alek86 - 6.12.2008, 18:53


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


Explorer
****


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

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



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

ну это все решаемо, просто пишем буфер вектора в другой инстанс. С такой стороны получется действительно строка  будет проще(при условии, что там парсинг простой).


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


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


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

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



Цитата(vinter @  6.12.2008,  18:47 Найти цитируемый пост)

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

Сплошным куском должен лежать не объект-вектор, а данные которые он хранит.  smile 
Также стандартизированы основной набор методов, однако способ реализации не оговаривается.

как Вы думаете, что получится если описания векторов в двух программах (которые обмениваются данными в виде объектов типа вектор)  будут незначительно отличаться ?
например так : 
Код

class vector
{
...
  size_t    m_size;
  T  *data;
};

class vector
{
...
  T  *data;
  size_t    m_size;
};

 smile

Добавлено @ 19:23
Цитата(vinter @  6.12.2008,  19:12 Найти цитируемый пост)
ну это все решаемо, просто пишем буфер вектора в другой инстанс. 

а никто и не говорит, что не решаемо..и не обязательно переписывать весь буфер.. 
просто было продемонстрировано, что
Цитата(mes @  6.12.2008,  18:37 Найти цитируемый пост)
P.S. у любого способа есть свои недостатки и преимущества, и нужно просто стараться найти оптимальное решение.  smile 

и подходить к делу осознанно  smile 


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


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


Explorer
****


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

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



mes, согласен smile
P.S и давай на ты, не привычно в интернете и на Вы...


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


Опытный
**


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

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



А про вариант сделать функцию перегруженной, предоставив более одного способа передачи данных, чего-то никто не вспомнил smile 
PM MAIL   Вверх
Torsten
Дата 8.12.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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


передавать строку - это точно геморой.  В дополнение к тому что ее распарсить нужно, нужно так же проверить все ли параметры в ней были. Эта фактически изменит сигнатуру функции foo - т.е. уже может вернуть ошибку (не удалось распарсить), и там где функцию вызывали эту ошибку уже надо как-то обрабатывать (по хорошему конечно, имбо кодеры конечно никаких проверок не делают smile.

Это сообщение отредактировал(а) Torsten - 8.12.2008, 19:21
--------------------
We have no begining, we have no end. We are infinite.
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.1531 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


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

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