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

    Тут главное определить - кто владеет каждым набором данных и какой к ним предоставляется интерфейс.
    Подвешивать id в глобальной области видимости - явный огрех проектирования.
    Как только твой модуль начнут использовать в многопоточных приложениях, будут долго чесать голову, откуда баги лезут =)

    Добавлено
    Цитата korvin @
    не, если б в С++ были как в Яве/C# только классы и их члены, без возможности объявить "простые" переменные и функции, не относящиеся ни к какому классу, вопросов бы не было. а так получается, что язык вроде и позволяет писать без классов, но никаких гарантий модульности не предоставляет.

    Гарантии модульности предоставляют программисты. Язык предоставляет возможности обеспечивать такие гарантии, не запрещая при этом стрелять в ногу =)
      Цитата Мяут-Настоящий @
      Тут главное определить - кто владеет каждым набором данных и какой к ним предоставляется интерфейс.
      Подвешивать id в глобальной области видимости - явный огрех проектирования.
      Как только твой модуль начнут использовать в многопоточных приложениях, будут долго чесать голову, откуда баги лезут =)

      перепиши мой код "по-правильному"

      Добавлено
      Цитата Мяут-Настоящий @
      Гарантии модульности предоставляют программисты. Язык предоставляет возможности обеспечивать такие гарантии, не запрещая при этом стрелять в ногу =)

      вот делфи и предоставляет такую возможность, в C++ же нужно эту возможность реализовывать самому =)
        ExpandedWrap disabled
          class GenericString {
              private:
                  int id;
           
              public:
                  GenericString() : id(0) { }
           
                  std::string operator()(std::string prefix) {
                      std::stringstream ss;
           
                      ss << prefix << id++;
                      return ss.str();
                  }
          } ;
           
          std::string genstr(std::string prefix) {
              static GenericString Generator = GenericString();
              return Generator(prefix);
          }



        Цитата korvin @

        вот делфи и предоставляет такую возможность, в C++ же нужно эту возможность реализовывать самому =)

        Самому-не самому, но мой метод более гибкий ;-)
          Цитата Мяут-Настоящий @
          ExpandedWrap disabled
            class GenericString {
                private:
                    int id;
             
                public:
                    GenericString() : id(0) { }
             
                    std::string operator()(std::string prefix) {
                        std::stringstream ss;
             
                        ss << prefix << id++;
                        return ss.str();
                    }
            } ;
             
            std::string genstr(std::string prefix) {
                static GenericString Generator = GenericString();
                return Generator(prefix);
            }



          Цитата korvin @

          вот делфи и предоставляет такую возможность, в C++ же нужно эту возможность реализовывать самому =)

          Самому-не самому, но мой метод более гибкий ;-)

          о боже... и где тут я должен увидеть потокобезопасность? оператор '++' потокобезопасен?

          в чем большая гибкость твоего метода?
          Сообщение отредактировано: korvin -
            Цитата korvin @
            в C++ же нужно эту возможность реализовывать самому =)

            Что значит реализовывать самому?
            - Конструктор - это initialization
            - class - это аналог unit
            - Интерфейс, реализация - выполняется аналогично

            Ну а если уж очень хочется пощеголять ключевыми словами, используй #define :D
              Цитата Мяут-Настоящий @
              - Конструктор - это initialization
              - class - это аналог unit
              - Интерфейс, реализация - выполняется аналогично

              Ну а если уж очень хочется пощеголять ключевыми словами, используй #define :D

              а давай без классов? для простых переменных и функций, их же никто писать не запрещает?
              и таки не занимай пространство имен типов! =)
                Цитата korvin @
                о боже... и где тут я должен увидеть потокобезопасность? оператор '++' потокобезопасен?

                Нет, но у меня id - инкапсулирован, и поэтому гарантируется, что при реализации потокобезопасности поправить код нужно только в одном месте - GenericString.
                Цитата korvin @

                в чем большая гибкость твоего метода?

                На основе GenericString шаблонами и наследованием можно плодить генераторы. Для начала создав например генератор, начинающий числа не с нуля =)

                Добавлено
                Цитата korvin @
                и таки не занимай пространство имен типов! =)

                У нас нет такой проблемы. Если все совсем плохо - можно обернуть все в namespace.
                Цитата korvin @
                а давай без классов? для простых переменных и функций, их же никто писать не запрещает?

                А давай я буду показывать код на C++, чистый C в заголовке темы не заявлен.
                  Цитата Мяут-Настоящий @
                  если уж очень хочется пощеголять ключевыми словами

                  расскажи про explicit, ага =)
                    Ну explicit это скорее одно из многих C++ных исключений чем правило =)
                    В общем случае C++ - старается быть лаконичным (отсюда кстати и проблема с читабельностью, что ты выше писал)
                      Цитата Мяут-Настоящий @
                      Нет, но у меня id - инкапсулирован, и поэтому гарантируется, что при реализации потокобезопасности поправить код нужно только в одном месте - GenericString.

                      дык и у меня инкапсулирован =) и также максимум -- поправить genstr.

                      Цитата Мяут-Настоящий @
                      На основе GenericString шаблонами и наследованием можно плодить генераторы. Для начала создав например генератор, начинающий числа не с нуля =)

                      если б я хотел плодить генераторы, так бы и написал, мне нужен один общий, глобальный. гарантировано общий глобальный =)

                      Цитата Мяут-Настоящий @
                      У нас нет такой проблемы. Если все совсем плохо - можно обернуть все в namespace.

                      это не проблема, это факт, class занимает глобальное пространство имен типов.

                      Цитата Мяут-Настоящий @
                      А давай я буду показывать код на C++, чистый C в заголовке темы не заявлен.

                      как будто в С++ уже нельзя использовать неклассовые перееменные и функции, ага =)

                      Добавлено
                      Цитата Мяут-Настоящий @
                      Ну explicit это скорее одно из многих C++ных исключений чем правило =)
                      В общем случае C++ - старается быть лаконичным (отсюда кстати и проблема с читабельностью, что ты выше писал)

                      а namespace -- замена безымянного класса? =)
                        Цитата korvin @

                        дык и у меня инкапсулирован =) и также максимум -- поправить genstr.

                        Что мешает какому-нибудь программисту взять и написать GenericString.id = 0?

                        Цитата korvin @

                        это не проблема, это факт, class занимает глобальное пространство имен типов.

                        ExpandedWrap disabled
                          namespace Internal {
                          class A {};
                          }

                        В каком месте класс A занимает глобальное пространство имен типов?
                        Цитата korvin @
                        если б я хотел плодить генераторы, так бы и написал, мне нужен один общий, глобальный. гарантировано общий глобальный =)

                        Я получил тот же результат на текущей итерации результат (общий глобальный), но более гибкую к изменениям систему (что есть плюс).
                        Факт в том, что ты не знаешь заранее, что тебе никогда не потребуется плодить генераторы.
                          Цитата Мяут-Настоящий @
                          Что мешает какому-нибудь программисту взять и написать GenericString.id = 0?

                          то, что оно находится в секции implementation и не видно извне модуля =)

                          Добавлено
                          Цитата Мяут-Настоящий @
                          Я получил тот же результат на текущей итерации результат (общий глобальный), но более гибкую к изменениям систему (что есть плюс).
                          Факт в том, что ты не знаешь заранее, что тебе никогда не потребуется плодить генераторы.

                          эм... знаю. это требование к генератору.

                          Добавлено
                          Цитата Мяут-Настоящий @
                          ExpandedWrap disabled
                            namespace Internal {
                            class A {};
                            }

                          а почему не
                          ExpandedWrap disabled
                            class Internal {
                            class A {};
                            }

                          ?

                          зачем нужно namespace, если по словам D_KEY классы в С++ покрывают все необходимости? =)
                            Погуглил. Так то шо ты показал сейчас - это ж даже в C есть.

                            ExpandedWrap disabled
                              // genstr.h
                               
                              void genstr(char* dest, int n, const char* prefix);
                               
                              // genstr.c
                               
                              static int id = 0;
                               
                              void genstr(char* dest, int n, const char* prefix) {
                                  snprinf(dest, n, "%s%d", prefix, id++);
                              }


                            Добавлено
                            Цитата korvin @
                            зачем нужно namespace, если по словам D_KEY классы в С++ покрывают все необходимости? =)

                            namespace можно размазывать по библиотеке в 100 исходников.

                            Добавлено
                            В принципе id упаковываем в genstr
                              Цитата Мяут-Настоящий @
                              Погуглил. Так то шо ты показал сейчас - это ж даже в C есть.

                              ExpandedWrap disabled
                                // genstr.h
                                 
                                void genstr(char* dest, int n, const char* prefix);
                                 
                                // genstr.c
                                 
                                static int id = 0;
                                 
                                void genstr(char* dest, int n, const char* prefix) {
                                    snprinf(dest, n, "%s%d", prefix, id++);
                                }

                              что мне мешает подключить genstr.c вместо genstr.h? и как тут с пространством имен, можно обратиться из внешнего кода к функции genstr как genstr.genstr (модуль.функция), а то вдруг какой-то еще модуль предоставляет функцию с такой сигнатурой? =)
                                Цитата korvin @
                                что мне мешает подключить genstr.c вместо genstr.h?

                                Наличие мозга в черепной коробке?
                                Цитата korvin @
                                и как тут с пространством имен, можно обратиться из внешнего кода к функции genstr как genstr.genstr (модуль.функция), а то вдруг какой-то еще модуль предоставляет функцию с такой сигнатурой? =)

                                Не паясничай :)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 119 120 [121] 122 123 ...  494 495


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