На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 376 377 [378] 379 380 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата KILLER @
    Как это может быть проблеммой WinAPI и сишных либ?

    Вот так.
    Цитата KILLER @
    новедь они работают как раз с последовательностями типа char* ...

    Работать с последовательностью символов равносильно разрешать кому-то писать в свой внутренний буфер? Не думаю...
      Цитата KILLER @
      Цитата D_KEY @
      Не?

      как работать с этим?
      Что мне передавать, например в функцию:

      ExpandedWrap disabled
        DWORD WINAPI GetCurrentDirectory(
          __in   DWORD nBufferLength,
          __out  LPTSTR lpBuffer
        );


      ??

      Да, к сожалению строки не дают гарантии линейного размещения в памяти и корректной ссылки из operator[]. Или в новом стандарте есть изменения?
      А вот вектор такие гарантии дает, потому можно так:
      ExpandedWrap disabled
        typedef std::vector<TCHAR> tstring;
         
        //...
         
        tstring my_string(buf_size);
        //...
        GetCurrentDirectory(my_string.size(), &my_string[0]);
        //...
        // далее нам доступны все средства для std::vector'а и его итераторов
      Сообщение отредактировано: D_KEY -
        Цитата MyNameIsIgor @
        Вот так.

        не может это быть порблемой WinAPI и сишных либ, потому что их юзают, а им плевать кто их юзает и где их юзают, это как раз проблема программиста использущего эти либы... Уж в 21 веке, могли бы допилить std::string, как нибудь, чтобы он нормально синхронизировался с последовательностями строк типа char* ...

        Цитата MyNameIsIgor @
        Работать с последовательностью символов равносильно разрешать кому-то писать в свой внутренний буфер? Не думаю...

        В смысле?

        Добавлено
        Цитата D_KEY @
        А вот вектор такие гарантии дает, потому можно так:

        Казалось бы причем тут std::string :D
          Цитата KILLER @
          Уж в 21 веке, могли бы допилить убогий WinAPI

          FIXED
          Цитата KILLER @
          В смысле?

          Что в смысле? С какой стати строки должны позволять то же, что D_KEY показал для векторов? С чего бы это разрешать кому-то писать во внутренний буфер объекта? Не вижу для этого причин...
            Цитата MyNameIsIgor @
            Цитата
            Уж в 21 веке, могли бы допилить убогий WinAPI

            FIXED

            А какой смысл его допиливать? Это что, часть языка С++ ? Это вообще отдельное приложение, с чего бы вдруг его нужно допиливать под стандарты С++ ?

            Цитата MyNameIsIgor @
            Что в смысле? С какой стати строки должны позволять то же, что D_KEY показал для векторов? С чего бы это разрешать кому-то писать во внутренний буфер объекта? Не вижу для этого причин...

            А они разве этого не позволяют? не смеши меня, я видел код где реально в функции с out char* параметрами, передавали (char*)mystring.c_str() . ;)

            Цитата MyNameIsIgor @
            С чего бы это разрешать кому-то писать во внутренний буфер объекта? Не вижу для этого причин...

            А ты и так туда можешь писать, через конструктор, через оператор присваивания...
              Цитата KILLER @
              Цитата D_KEY @
              А вот вектор такие гарантии дает, потому можно так:

              Казалось бы причем тут std::string :D

              Ну так проблема в несоответствии C Win API и стандартной библиотеки C++. Это никак не связано с обсуждением.
              Кроме того, что конкретно тебе нужно от строк такого, чего не даст тебе вектор?
              Кстати, на стыке С и С++ можно и так:
              ExpandedWrap disabled
                typedef std::vector<TCHAR> tbuffer;
                typedef std::basic_string<TCHAR> tstring;
                 
                //...
                 
                tbuffer buf(buf_size);
                GetCurrentDirectory(buf.size(), &buf[0]);
                // Можем работать с буфером, если нам этого достаточно
                // Или создать строку:
                tstring my_str(buf.begin(), buf.end());


              Добавлено
              Цитата MyNameIsIgor @
              С какой стати строки должны позволять то же, что D_KEY показал для векторов?

              Я, честно говоря, не знаю, почему бы строкам не давать такие же гарантии, что дают вектора?
                Цитата KILLER @
                А какой смысл его допиливать? Это что, часть языка С++ ? Это вообще отдельное приложение, с чего бы вдруг его нужно допиливать под стандарты С++ ?

                Ну, а с чего бы вдруг допиливать C++ под какой-то там WinAPI и его венерологические проблемы? :)
                И да, WinAPI надо допиливать не для плюсов... Его вообще надо переделывать, ибо он уё...щен от рождения.
                Цитата KILLER @
                А они разве этого не позволяют? не смеши меня, я видел код где реально в функции с out char* параметрами, передавали (char*)mystring.c_str() .

                А я видел тех, кто прыгает с десятиэтажки. Так и запишем - прыгать с высотных зданий можно. Но только после вас... может быть... и то вряд ли.
                Цитата KILLER @
                А ты и так туда можешь писать, через конструктор, через оператор присваивания...

                Я? Нет, не могу. Я могу лишь сказать что туда записать, но сам я не пишу.
                  Цитата D_KEY @
                  Ну так проблема в несоответствии C Win API и стандартной библиотеки C++. Это никак не связано с обсуждением.

                  Проблема не в этом, проблема в том, что в большинстве приложений/SDK/либ юзают свой тип строк либо стандартный char*

                  Цитата D_KEY @
                  Кроме того, что конкретно тебе нужно от строк такого, чего не даст тебе вектор?

                  Очень замечательный вопрос, теперь скажи, нахер мне нужен std::string, если есть std::vector<char>, полностью заменяющий std::string, и даже лучше?

                  Цитата D_KEY @
                  стати, на стыке С и С++ можно и так:

                  а не проще так?
                  ExpandedWrap disabled
                    TCHAR myBuffer[MAX_PATH];
                    GetCurrentDirectory(MAX_PATH, myBuffer);


                  ??
                  Сообщение отредактировано: KILLER -
                    Цитата KILLER @
                    Цитата D_KEY @
                    Ну так проблема в несоответствии C Win API и стандартной библиотеки C++. Это никак не связано с обсуждением.

                    Проблема не в этом, проблема в том, что в большинстве приложений/SDK/либ юзают свой тип строк либо стандартный char*

                    Я с этим утверждением не согласен.

                    Цитата
                    Очень замечательный вопрос, теперь скажи, нахер мне нужен std::string, если есть std::vector<char>, полностью заменяющий std::string, и даже лучше?

                    Ты меня спрашиваешь, зачем тебе что-то там нужно?

                    Цитата
                    Цитата D_KEY @
                    стати, на стыке С и С++ можно и так:

                    а не проще так?
                    ExpandedWrap disabled
                      TCHAR myBuffer[MAX_PATH];
                      GetCurrentDirectory(MAX_PATH, myBuffer);


                    ??

                    Если тебе с массивами удобнее работать, чем с векторами и строками - то пожалуйста :)
                      Цитата MyNameIsIgor @
                      Ну, а с чего бы вдруг допиливать C++ под какой-то там WinAPI и его венерологические проблемы? :)

                      Потому что С++ не имеет своего типа строка.

                      Цитата MyNameIsIgor @
                      И да, WinAPI надо допиливать не для плюсов... Его вообще надо переделывать, ибо он уё...щен от рождения.

                      Это уже к теме отношения не имеет.

                      Цитата MyNameIsIgor @
                      А я видел тех, кто прыгает с десятиэтажки. Так и запишем - прыгать с высотных зданий можно. Но только после вас... может быть... и то вряд ли.

                      Ммм... Т.е. если язык позволяет сделать то, что делать в принципе нельзя, значит - это так и нужно? :D

                      Цитата MyNameIsIgor @
                      Я? Нет, не могу. Я могу лишь сказать что туда записать, но сам я не пишу.

                      Передавая c_str в винапишную функцию, ты тоже туда ничего не пишешь, пишет функция!

                      Добавлено
                      Цитата D_KEY @
                      Ты меня спрашиваешь, зачем тебе что-то там нужно?

                      Ну да, тебя, ты ведь тут рассказываешь делфистам, какой замечательный и незаменимый класс basic_string... И тут выясняеца, что мол де, много где он никому нафиг не нужен... Теперь ты предлогаешь юзать вектор, зачем мне юзать вектор, если есть std::string ? А если вектор дает все, что мне нужно для работы со строками, тогда зачем нужен std::string ?

                      Цитата D_KEY @
                      Если тебе с массивами удобнее работать, чем с векторами и строками - то пожалуйста :)

                      Мне удобнее написать элементарно понятный код, а не хреначить куда не попадя половину STL'я, только затем, чтобы показать какой я кул знаток STLя :D
                        Цитата KILLER @
                        Цитата MyNameIsIgor @
                        Ну, а с чего бы вдруг допиливать C++ под какой-то там WinAPI и его венерологические проблемы? :)

                        Потому что С++ не имеет своего типа строка.

                        :wacko: А как же basic_string?

                        Цитата
                        Т.е. если язык позволяет сделать то, что делать в принципе нельзя, значит - это так и нужно? :D

                        Зависит от целей и идеологии языка :)

                        Цитата
                        Передавая c_str в винапишную функцию, ты тоже туда ничего не пишешь, пишет функция!

                        По стандарту ты вообще не знаешь куда она там пишет :) Теоретически строка может даже не измениться.
                          Цитата KILLER @
                          Потому что С++ не имеет своего типа строка.

                          Т.е. std::basic_string не существует? Как интересно...
                          Цитата KILLER @
                          Это уже к теме отношения не имеет.

                          WinAPI отношения к теме не имеет. Но раз уж он был помянут, то следует сказать, что это образец того как не надо делать.
                          Цитата KILLER @
                          Ммм... Т.е. если язык позволяет сделать то, что делать в принципе нельзя, значит - это так и нужно?

                          Ах! Так надо, чтобы язык запрещал? Ну, это вон .NET, JVM, лиспы и всякая разная функциональщина. А в плюсах принято думать головой, прежде чем прыгать :)
                          Цитата KILLER @
                          Передавая c_str в винапишную функцию, ты тоже туда ничего не пишешь, пишет функция!

                          Передать результат c_str куда-то, что может записывать, нельзя. Прежде надо этот результат скастовать. Тот, кто пропустит так код на ревью - му..ак. А тот, кто напишет... думаю, ясно :)
                            Цитата D_KEY @
                            :wacko: А как же basic_string?

                            это пользовательский класс строка, который имеет свои недостатки, приведенные например выше, я имел ввиду встроенный тип string, наподобии как в делфях.

                            Цитата D_KEY @
                            По стандарту ты вообще не знаешь куда она там пишет :) Теоретически строка может даже не измениться.

                            По какому стандарту? В стандарте есть описание винапишных функций?

                            Добавлено
                            Цитата MyNameIsIgor @
                            Т.е. std::basic_string не существует? Как интересно...

                            D_KEY'ю ответил...

                            Цитата MyNameIsIgor @
                            WinAPI отношения к теме не имеет. Но раз уж он был помянут, то следует сказать, что это образец того как не надо делать.

                            Конечно не имеет, я его тут привел в качестве API, в котором работа с классом basic_string затруднительна...

                            Цитата MyNameIsIgor @
                            Ах! Так надо, чтобы язык запрещал? Ну, это вон .NET, JVM, лиспы и всякая разная функциональщина. А в плюсах принято думать головой, прежде чем прыгать :)

                            И часто ты в С++ думаешь головой, прежде чем прыгать? :D

                            Цитата MyNameIsIgor @
                            Передать результат c_str куда-то, что может записывать, нельзя. Прежде надо этот результат скастовать. Тот, кто пропустит так код на ревью - му..ак. А тот, кто напишет... думаю, ясно :)

                            Всяко бывает, всего не уследишь... Особенно если изменений много много...
                              Цитата KILLER @
                              это пользовательский класс строка

                              Стандартный :)

                              Цитата
                              который имеет свои недостатки, приведенные например выше

                              Какой там был выше приведен недостаток :blink: ?

                              Цитата
                              я имел ввиду встроенный тип string

                              Если язык позволяет создать точно такой же пользовательский тип, то зачем его зашивать в язык :-?

                              Цитата
                              Цитата D_KEY @
                              По стандарту ты вообще не знаешь куда она там пишет :) Теоретически строка может даже не измениться.

                              По какому стандарту? В стандарте есть описание винапишных функций?

                              Нет, стандарт не дает тебе гарантий, что твои попытки писать в результат c_str(), изменят исходную строку(а не какой-то дополнительный буфер, например).
                                Цитата KILLER @
                                это пользовательский класс строка

                                Какой же он пользовательский то в std? :huh:
                                Цитата KILLER @
                                Конечно не имеет, я его тут привел в качестве API, в котором работа с классом basic_string затруднительна...

                                Конечно. Всем не угодишь. Я ещё раз говорю: строки в плюсах не проектировались как выходные буфера. Они проектировались как строки.
                                Цитата KILLER @
                                И часто ты в С++ думаешь головой, прежде чем прыгать?

                                Я стараюсь вообще всегда думать головой :)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 376 377 [378] 379 380 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5300 ]   [ 14 queries used ]   [ Generated: 30.07.26, 17:05 GMT ]