На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (77) « Первая ... 9 10 [11] 12 13 ...  76 77  ( Перейти к последнему сообщению )  
> Текущий Стандарт С++ и перспективы его развития
    Цитата Hsilgos @
    Это пример попахивает возвращением к глобальным переменным.

    Ну не скажи. Лямбды они тем и хороши, что могут работать в контексте инициализации функтора.
      Цитата Flex Ferrum @
      Хотя, нередко std::accumulate используется именно для последовательной сцепки элементов. В паралельном режиме результат, гм... непредсказуем... :)

      Вот это, к слову говоря, открывает одну палку С++ о двух концах. С одной стороны, стремление в С++ к минимализму, в принципе, мне понятно и чем-то изнутри меня это стремление одобряется. С другой стороны, крайность, с которой С++ проповедует минимализм меня немного ужасает. Вот взять std::string и QString - в первом всего по минимум, другим, OTOH, очень удобно пользоваться. Почему не сделают какой-никакой аналог интерфейса QString, .NET::System::String, etc.?
      Аналогично с алгоритмами - почему нет строковых алгоритмов, в частности concatenate/join мне не совсем понятно... Его стоило бы ввести даже если бы для accumulate был бы специфицирован порядок аккумуляции по той простой причине, что я хочу сказать в коде "я объединяю коллекцию строк", а не "я аккумулирую коллекцию строк".
      Сообщение отредактировано: archimed7592 -
        archimed7592
        ExpandedWrap disabled
          // library code
          SomeLibrary1::SomeClassImplementation1 getSomeValue1();
          // library code
          SomeLibrary2::SomeClassImplementation2 getSomeValue2();
           
          // client code
          auto value1 = getSomeValue1();
          auto value2 = getSomeValue2();
           
          // ок. А теперь я хочу вызвать какие-то методы
          value1.SomeMethod1();
          value2.SomeMethod2();
          // Э... А как их различать? А как компилятор различает эти 2 разных типа?
          // А может, так?
          (SomeLibrary1::SomeClassImplementation1)value1.SomeMethod1();
          (SomeLibrary1::SomeClassImplementation1)value2.SomeMethod2();
          //  Фуууууу....
          Цитата archimed7592 @
          Его стоило бы ввести даже если бы для accumulate был бы специфицирован порядок аккумуляции по той простой причине, что я хочу сказать в коде "я объединяю коллекцию строк", а не "я аккумулирую коллекцию строк".

          Ээээ...
          ExpandedWrap disabled
            std::vector<string> strings = ....;
             
            std::string result = boost::join(strings, "\\");

          :whistle:
          string_algo
            И вообще, я такой код уже где-то видел.
            Э... Дай мне мой маразм памяти...
            ExpandedWrap disabled
              10 DEM i1 = 12;
              20 DEM i2 = 'Hello'
              30 Print i2;
              40 Print i1;
              50 goto 10

            Как-то так :D
              Цитата Hsilgos @
              И вообще, я такой код уже где-то видел.
              Э... Дай мне мой маразм памяти...

              Правда, тут нужно учесть разницу между compile-time и run-time типизацией. ;)
                Цитата Flex Ferrum @
                Ээээ...

                Ээээ, это буст, я про стандартную библиотеку. Почему нет в стандарте - одному комитету известно...


                Hsilgos, либо я тебя не понимаю, либо ты меня. Третьего не дано :).
                Цитата Hsilgos @
                // Э... А как их различать? А как компилятор различает эти 2 разных типа?

                Вот зачем ему что-то различать? Он и так знает какого типа переменная...

                Опять же, провожу аналогию с шаблонными ф-циями:
                ExpandedWrap disabled
                  // library code
                  template< class StringT >
                  void foo(const StringT &str)
                  {
                      int len = str.length(); // как он различает? А может так: ... Фyyyyуу
                      std::cout << "passed string length equals to " << len << std::endl;
                      // ...
                  }
                   
                  // client code
                  std::string ss = "standard string";
                  QString qs = "qt string";
                  foo(ss);
                  foo(qs);

                Ты давно пользуешься тем свойством компилятора, что он всегда знает статические типы переменных(по крайней мере язык так устроен, что он не может не знать) просто, видимо, не до конца осознаёшь этого...
                  Цитата archimed7592 @
                  Ээээ, это буст, я про стандартную библиотеку. Почему нет в стандарте - одному комитету известно...

                  Тебе шашечки или ехать? ;)
                    Цитата Flex Ferrum @
                    Тебе шашечки или ехать? ;)

                    Мне бы скрестить наилучшии стороны C++, Java и C#, включая их фреймворки :).
                      Цитата archimed7592 @
                      Мне бы скрестить наилучшии стороны C++, Java и C#, включая их фреймворки :).

                      О как... :) ИМХО, это из области фантастики... :)
                        Цитата Flex Ferrum @
                        ИМХО, это из области фантастики... :)

                        Это ещё почему? :)
                          Цитата archimed7592 @
                          Это ещё почему? :)

                          Концепции слишком сильно различаются. Я думаю, например, что если бы было возможно перенести плюсовые шаблоны в шарп - это было бы сделано, но вместо этого там какие-то generic'и... И это, вообщем то, объяснимо. Тот же reflection накладывает свои ограничения. Ну и т. д.
                            Цитата Flex Ferrum @
                            Концепции слишком сильно различаются. Я думаю, например, что если бы было возможно перенести плюсовые шаблоны в шарп - это было бы сделано, но вместо этого там какие-то generic'и... И это, вообщем то, объяснимо. Тот же reflection накладывает свои ограничения. Ну и т. д.

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

                            Добавлено
                            Цитата Flex Ferrum @
                            Концепции слишком сильно различаются.

                            BTW, я это отлично понимаю, но у меня в голове уже некоторое время крутится идея как эти концепции скрестить для получения более эффективной.
                              Цитата archimed7592 @
                              Флекс, я вот, хоть убей, никак не пойму, что мешает шаблонам жить рядом с дженериками, рефлексивным классам рядом с нерефлексивными, управляемой куче и неуправляемой, множественному наследованию и интерфейсам и т.д...

                              Судя по всему, технически это совместить очень сложно.
                                Цитата Flex Ferrum @
                                Судя по всему, технически это совместить очень сложно.

                                Флекс, ну у тебя же на компьютере нормально сосуществует куча нативного кода и ява/дотнеты-машины?
                                Кстати, managed C++ - совмещено? Совмещено... Просто плохо и неудобно совмещено(по понятным причинам - целью было добится какой-нибудь совместимости, а ценою чего эта совместимость достанется никого, видимо, не волновало).
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (77) « Первая ... 9 10 [11] 12 13 ...  76 77


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0459 ]   [ 15 queries used ]   [ Generated: 29.05.24, 04:18 GMT ]