Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 380 381 [382] 383 384 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5716
,
|
|
|
|
|
Сообщ.
#5717
,
|
|
|
|
Цитата KILLER @ Дык и строка WinAPIшная -- массив чаров. У меня вектор больше асоциируется с массивом данных. |
|
Сообщ.
#5718
,
|
|
|
|
Цитата D_KEY @ Не, там какое-то несоответствие и типов, и шаблонных параметров. Кроме того, у тебя там ничего не изменяется. Ну может гдето ошибся в названии идентификатора, а насчет не изменяется, как же? Я из глинянного сосуда, делаю кувшин. Хотя наверное ты прав, я немного подпилил пример, смотри, похоже оно: ![]() ![]() функция СделатьКувшин(глина, количество глины) { делаем кувшин из глины. } int main() { std::string_СосудCГлиной сосуд("Я сосуд с глиной"); std::vector_БездоннаяБочка<глина> БочкаГлины(сосуд.НалитьГлины(), сосуд.ПокаОнаНеКончицаВСосуде()); БочкаГлины.добавить(дно/крышку); СделатьКувшин( оператор_взятия_глины(БочкаГлины) ); } Добавлено Цитата Повстанець @ Дык и строка WinAPIшная -- массив чаров. Тем, что при работе с вектором, у меня не возникает желания отслеживать в нем '\0' . |
|
Сообщ.
#5719
,
|
|
|
|
Цитата KILLER @ Дык это требования WinApi. Почему система типов языка должна соответствовать требованиям отдельной операционной системы? Тем, что при работе с вектором, у меня не возникает желания отслеживать в нем '\0' . |
|
Сообщ.
#5720
,
|
|
|
|
Цитата Повстанець @ Дык это требования WinApi. Почему система типов языка должна соответствовать требованиям отдельной операционной системы? Та чего ж ты до WinApi пристал то Это был всего лишь наглядный пример, где работа с std::string'ами, не очень удобна. |
|
Сообщ.
#5721
,
|
|
|
|
Цитата KILLER @ Дык у тебя кроме него ничего и нет.Та чего ж ты до WinApi пристал Цитата KILLER @ Ну да. Требовать от одного типа, чтобы он работал как другой не очень удобно. Да. Это был всего лишь наглядный пример, где работа с std::string'ами, не очень удобна. |
|
Сообщ.
#5722
,
|
|
|
|
Цитата KILLER @ смотри, похоже оно: ![]() ![]() функция СделатьКувшин(глина, количество глины) { делаем кувшин из глины. } int main() { std::string_СосудCГлиной сосуд("Я сосуд с глиной"); std::vector_БездоннаяБочка<глина> БочкаГлины(сосуд.НалитьГлины(), сосуд.ПокаОнаНеКончицаВСосуде()); БочкаГлины.добавить(дно/крышку); СделатьКувшин( оператор_взятия_глины(БочкаГлины) ); } Вот уже лучше. Ну так что тебе не нравится? Цитата Тем, что при работе с вектором, у меня не возникает желания отслеживать в нем '\0' А при работе с char* воздникает? Добавлено KILLER, а вообще ты спугнул снова появившихся было Delphi'цев |
|
Сообщ.
#5723
,
|
|
|
|
Цитата Повстанець @ Дык у тебя кроме него ничего и нет. Как нет? Откуда ты знаешь что у меня есть, а чего у меня нет? Кроме WinAPI, больше нет библ которые юзают С-строки ? Цитата Повстанець @ Ну да. Требовать от одного типа, чтобы он работал как другой не очень удобно. Да. ну ведь вектор, который к строкам отношения не имеет ты ведь юзаешь нормально. А давай зайдем с тылу, вот ответьте мне на вопрос, что такое строка в С++, подчеркиваю именно в С++ ? Добавлено Цитата D_KEY @ Вот уже лучше. Ну так что тебе не нравится? Мне не нравится то, что для того чтобы слепить кувшин, мне приходится брать бездонную бочку, переливать в нее глину из сосуда с глиной, потом натравливать на эту бочку оператор взятия глины! И это нужно учитывать, что после переливания глины из сосуда в бочку, если вдруг забыл бочке дно сделать, то глины будет немеряно... И можно получить не совсем таки кувшин... не проще ли брать глину непосредственно из сосуда? Цитата D_KEY @ А при работе с char* воздникает? Как с С-строками? Конечно. Цитата D_KEY @ KILLER, а вообще ты спугнул снова появившихся было Delphi'цев ![]() Это не я |
|
Сообщ.
#5724
,
|
|
|
|
Цитата KILLER @ Ну да. Если за строку приняли вектор с нулём в конце, то на нижних слоях системы именно им и пользуюсь. И даже частенько не std::vector, а тупо tchar[size] на стеке. Если размер и юзкейс зараннее известен.ну ведь вектор, который к строкам отношения не имеет ты ведь юзаешь нормально. Цитата KILLER @ Дык и поступают с такими либами так же, как и с WinApi.Кроме WinAPI, больше нет библ которые юзают С-строки ? Цитата KILLER @ дык известно что, std::string. А давай зайдем с тылу, вот ответьте мне на вопрос, что такое строка в С++, подчеркиваю именно в С++ ? |
|
Сообщ.
#5725
,
|
|
|
|
Цитата Повстанець @ Ну да. Если за строку приняли вектор с нулём в конце, то на нижних слоях системы именно им и пользуюсь. И даже частенько не std::vector, а тупо tchar[size] на стеке. Если размер и юзкейс зараннее известен. Вот об этом я и говорю. В итоге приходица таки делать лишнии, никому не нужные и мазолящие глаза временные буфера. Цитата Повстанець @ Дык и поступают с такими либами так же, как и с WinApi. Конечно! Я и говорю, чего ты к Винапи привязался. Цитата Повстанець @ дык известно что, std::string. а как же остальное? |
|
Сообщ.
#5726
,
|
|
|
|
Цитата KILLER @ Мне не нравится то, что для того чтобы слепить кувшин, мне приходится брать бездонную бочку, переливать в нее глину из сосуда с глиной, потом натравливать на эту бочку оператор взятия глины! И это нужно учитывать, что после переливания глины из сосуда в бочку, если вдруг забыл бочке дно сделать, то глины будет немеряно... И можно получить не совсем таки кувшин... не проще ли брать глину непосредственно из сосуда? Так я не понимаю, почему ты так и не сделал? Скопируй глину из сосуда, сделай кувшин, затем помести обратно в сосуд. Цитата Как с С-строками? Конечно. Так в чем разница при работе как с С-строкой между char* и std::vector? |
|
Сообщ.
#5727
,
|
|
|
|
Цитата D_KEY @ Так я не понимаю, почему ты так и не сделал? Скопируй глину из сосуда, сделай кувшин, затем помести обратно в сосуд. А я разве не то сделал? ну разве что обратно в сосуд я не поместил, ибо лень было писать. Цитата D_KEY @ Так в чем разница при работе как с С-строкой между char* и std::vector? Так в этом разница и есть, когда я вижу char*, и вижу в описании функции что работает с этим указателем как с С-строкой, применяя спец функции, я сразу понимаю что это С-строка, когда я вижу вектор(неважно чего), я сразу понимаю - что это данные, массив данных, но не строка. Добавлено D_KEY, если ты не понял, меня смущает то, что я должен юзать вообще какие то левые классы/обертки/извраты и все остальное, только для того, чтобы поработать со строкой... Мне приходица переключатся на другие типы данных, чтобы имитировать С-строку... |
|
Сообщ.
#5728
,
|
|
|
|
Цитата KILLER @ Блин, а голова тебе зачем? чтобы есть в неё?Вот об этом я и говорю. В итоге приходица таки делать лишнии, никому не нужные и мазолящие глаза временные буфера. ![]() ![]() template<typename char_t, typename sting_t = std::basic_string<char_t>> class cchar_to_string_bridge { public: typedef char_t char_type; typedef sting_t string_type; public: cchar_to_string_bridge(string_type& str, std::size_t size) : _cchar_string(size, 0), _string(str) { } ~cchar_to_string_bridge() { _string = std::string(_cchar_string.begin(), _cchar_string.end()); } operator char_type*() { return &_cchar_string[0]; } private: string_type& _string; std::vector<char_type> _cchar_string; }; int main() { std::string curr_dir; GetCurrentDirectory(MAX_PATH, cchar_to_string_bridge<TCHAR>(curr_dir, MAX_PATH)); return 0; } |
|
Сообщ.
#5729
,
|
|
|
|
Цитата Повстанець @ Блин, а голова тебе зачем? чтобы есть в неё? Ага, хороший велосипед, показывает всю гибкость работы с std::string |
|
Сообщ.
#5730
,
|
|
|
|
Цитата KILLER @ D_KEY, если ты не понял, меня смущает то, что я должен юзать вообще какие то левые классы/обертки/извраты и все остальное, только для того, чтобы поработать со строкой... Тебе не со строкой поработать надо, а с массивом данных, С-строкой, которое некоторое API считает строкой Чего ты вообще хочешь, работая с неродным для языка API? |