Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 379 380 [381] 382 383 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#5701
,
|
|
|
|
Никакого ревью он не проходил Я вообще не смотрел, как ты инициализируешь строку.Цитата Проблема не в этом, проблема в том, что вектор так и просится чтобы его рассматривали именно как массив данных, а не строки. Понимаешь к чему я клоню? Так и С-строки ты будешь рассматривать точно так же. Моя твоя не понимать, ты рассуждаешь так, будь-то у тебя С и С++ в коде разбросаны произвольным образом и никаких подсистем разного уровня и, соответственно, стыков между ними... Цитата Ничего не напоминает? Я когда-то отрицал это? Или тебе напомнить "лисповые" холивары, где я был скорее против С++? Добавлено Цитата KILLER @ Мы тут рассматриваем недостатки ЯП, или обсуждаем что мне стоит использовать, а что не стоит? Нельзя рассматривать "недостатки" без учета сферы применения |
|
Сообщ.
#5702
,
|
|
|
|
Цитата MyNameIsIgor @ Он хочет, чтобы плюсовые строки могли быть буферами в сишном API. Я не только не представляю как это сделать... я просто чушью считаю ![]() Я вообще то много чего хочу, это к теме отношения не имеет, так же как и WIN API, а ктому все это было, что при наличии кучи классов для работы со строками, с ними работать неудобно. Приходится извращатся в прямом смысле этого слова. То что выше понаписано - это костыли и извращения, которые приходится применять потому, что по другому никак |
|
Сообщ.
#5703
,
|
|
|
|
Цитата KILLER @ с ними работать неудобно. Ты своими примерами пока этого не показал. |
|
Сообщ.
#5704
,
|
|
|
|
Цитата D_KEY @ Никакого ревью он не проходил Я вообще не смотрел, как ты инициализируешь строку.М.б. ты и код не смотрел, который я привел? Цитата D_KEY @ Так и С-строки ты будешь рассматривать точно так же. Ты понимаешь что работа в данном случае будет одностилевая? Т.е. я работаю с указателем char* как со строкой, принимая во внимае что у меня конец строки '\0'. Когда идут пляски с бубном и юзается std::string как строка, std::vector - как промежуточный костыль, для того чтобы изменить эту строку с помощью функции trim(char*); очень легко запутаца во всем этом бреде. Цитата D_KEY @ Я когда-то отрицал это? Или тебе напомнить "лисповые" холивары, где я был скорее против С++? И ты считаешь это достоинством? Цитата D_KEY @ Нельзя рассматривать "недостатки" без учета сферы применения ![]() Ну так сферу применения я привел, разве нет? |
|
Сообщ.
#5705
,
|
|
|
|
Цитата KILLER @ То что выше понаписано - это костыли и извращения Что именно? Использование векторов как буферов для низкоуровневого API? Это вообще один из его use-case'ов. Чтобы людям не приходилось юзать обычные массивы для динамических буферов, даже если им приходится работать с C-API. Цитата которые приходится применять потому, что по другому никак ![]() Хорошо, я прошу по-другому. А как бы ты хотел организовать работу из С++ с C-API? |
|
Сообщ.
#5706
,
|
|
|
|
Цитата D_KEY @ Ты своими примерами пока этого не показал. Ну как же не показал? Ты мне сам привел кашу из std::string - чисто рассово С++ строки + std::vector<char> - вообще массив данных + char* - С-строки... Это три разных типа строк только в одном месте Это ли удобство? Добавлено Цитата D_KEY @ Что именно? Использование векторов как буферов для низкоуровневого API? Это вообще один из его use-case'ов. Чтобы людям не приходилось юзать обычные массивы для динамических буферов, даже если им приходится работать с C-API. Да хотя бы. Цитата D_KEY @ Хорошо, я прошу по-другому. А как бы ты хотел организовать работу из С++ с C-API? При текущей реализации, понятия не имею... Ну хотя бы как вариант, сделали бы std::string по подобию вектора, а также реализовали бы c_str() который давал бы доступ к С-строке для изменения(как например это делает std::vector), либо же по примеру метода release у auto_ptr ... |
|
Сообщ.
#5707
,
|
|
|
|
KILLER, тебе никогда не приходило в голову, что системное API выставляет свои требования к типам безотносительно к таковым из любого языка программирования? Именно поэтому, на чём бы ты не писал -- первым делом надо локализировать все обращения к системе в обёртках, которые уже будут работать в системе типов и окружении языка. Блин, вообще проблем таких не бывает, что ты описываешь. API -- то ж библиотеки с высоким уровнем доверия. Блин, даже на встраиваемых системах, где общение с системой очень плотное, обёртки пишутся раз, тестятся и потом в них никто никогда не лезет.
|
|
Сообщ.
#5708
,
|
|
|
|
Цитата KILLER @ М.б. ты и код не смотрел, который я привел? Я посмотрел, как ты передаешь вектор в функцию и как получаешь итоговую строку. Именно это относится к обсуждению. Цитата Ты понимаешь что работа в данном случае будет одностилевая? Т.е. я работаю с указателем char* как со строкой, принимая во внимае что у меня конец строки '\0'. Когда идут пляски с бубном и юзается std::string как строка, std::vector - как промежуточный костыль, для того чтобы изменить эту строку с помощью функции trim(char*); очень легко запутаца во всем этом бреде. Так ты используй буфер для связи с C API, а не в высокоуровневом коде. Цитата И ты считаешь это достоинством? Я считаю, что совместимый с С системный язык другим вряд ли может быть |
|
Сообщ.
#5709
,
|
|
|
|
Цитата Повстанець @ KILLER, тебе никогда не приходило в голову, что системное API выставляет свои требования к типам безотносительно к таковым из любого языка программирования? Именно поэтому, на чём бы ты не писал -- первым делом надо локализировать все обращения к системе в обёртках, которые уже будут работать в системе типов и окружении языка. Блин, вообще проблем таких не бывает, что ты описываешь. API -- то ж библиотеки с высоким уровнем доверия. Блин, даже на встраиваемых системах, где на общение с системой очень плотное, обёртки пишутся раз, тестятся и потом в них никто никогда не лезет. Одно дело когда это системное API, другое дело, когда это не системное API, и человек его писавший, не постиг дао STL, юзал обычные голые указатели... Добавлено Цитата D_KEY @ Я посмотрел, как ты передаешь вектор в функцию и как получаешь итоговую строку. Именно это относится к обсуждению. научи меня из 4 строчек кода, видеть вторые две, и абсолютно не видеть первые две Цитата D_KEY @ Так ты используй буфер для связи с C API, а не в высокоуровневом коде. Иногда взападло писать голые указатели. особенно когда у меня работа идет с std::string, очень не хочеца создавать всякие вектора иил динамические голые массивы, для какой нибудь дряни, типа функции trim или им подобным. Вот не смотрица оно, ни с какой стороны. |
|
Сообщ.
#5710
,
|
|
|
|
Цитата KILLER @ Цитата D_KEY @ Ты своими примерами пока этого не показал. Ну как же не показал? Ты мне сам привел кашу из std::string - чисто рассово С++ строки + std::vector<char> - вообще массив данных + char* - С-строки... Это три разных типа строк только в одном месте Это ли удобство?В каком одном месте? С++ строки не предназначены для того, чтобы в них писали из С-API, для этого есть vector'а. Читать же ты можешь на здоровье. И чего же в этом страшного - понятия не имею. Добавлено Цитата KILLER @ Ну хотя бы как вариант, сделали бы std::string по подобию вектора, а также реализовали бы c_str() который давал бы доступ к С-строке для изменения(как например это делает std::vector) Я тебя уже спрашивал, какие возможности строк, которые не предоставляет вектор тебе нужны при работе со строкой, заполненной из C-API? А если очень нужно: ![]() ![]() tstring some_wrapper_function() { // здесь работаем через tbuffer return tstring(&my_buf[0]); } |
|
Сообщ.
#5711
,
|
|
|
|
Цитата D_KEY @ В каком одном месте? С++ строки не предназначены для того, чтобы в них писали из С-API, для этого есть vector'а. Читать же ты можешь на здоровье. И чего же в этом страшного - понятия не имею. ну давай я тебе объясню по другому, псевдокодом: ![]() ![]() функция СделатьКувшин(глина, количество глины) { делаем кувшин из глины. } int main() { std::string_ГлиняныйСосуд сосуд("Я сосуд из глины"); std::vector_БездоннаяБочка<глина> БочкаГлины(сосуд.ВерхСосуда(), сосуд.НизСосуда()); БочкаГлины.добавить(дно); СделатьКувшин( оператор_разжижения_глины_из_сосуда_из_глины(БочкаГлины) ); } Вот примерно так и получается. Нет чтобы передать глину сразу, нет, нужно пройти этап извращений,.. Добавлено Цитата D_KEY @ Я тебя уже спрашивал, какие возможности строк, которые не предоставляет вектор тебе нужны при работе со строкой, заполненной из C-API? Вектор - это не строки, не путай. В этом и проблема. |
|
Сообщ.
#5712
,
|
|
|
|
Цитата KILLER @ ну давай я тебе объясню по другому, псевдокодом: Он у тебя не соответствует тому, что мы рассматривали Цитата Цитата D_KEY @ Я тебя уже спрашивал, какие возможности строк, которые не предоставляет вектор тебе нужны при работе со строкой, заполненной из C-API? Вектор - это не строки, не путай. В этом и проблема. Ты можешь ответить на вопрос? |
|
Сообщ.
#5713
,
|
|
|
|
Цитата D_KEY @ Он у тебя не соответствует тому, что мы рассматривали Почему? Тоже самое. Цитата D_KEY @ Ты можешь ответить на вопрос? Нет не могу, т.к. вектор - к строкам отношения не имеет. |
|
Сообщ.
#5714
,
|
|
|
|
Цитата KILLER @ К WinAPIшным строкам -- ещё как имеет. Там строки -- соглашение о векторе с нулём в конце. Нет не могу, т.к. вектор - к строкам отношения не имеет. |
|
Сообщ.
#5715
,
|
|
|
|
Цитата KILLER @ Цитата D_KEY @ Он у тебя не соответствует тому, что мы рассматривали Почему? Тоже самое. Не, там какое-то несоответствие и типов, и шаблонных параметров. Кроме того, у тебя там ничего не изменяется. Цитата Нет не могу, т.к. вектор - к строкам отношения не имеет. Чем он хуже массива char'ов? |