На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Отступы, отступы, отступы.. , Any
   
Читаем первое сообщение и выбираем!
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Разгребая по долгу работы чужой код, задумался над вопросом предпочтения разработчиками определённого стиля расстановки отступов.
    Выделил несколько наиболее ярких стилей, которые мне повстречались, и свёл их на примере описания класса

    Итак,
    1.
    ExpandedWrap disabled
      class MyFavoriteIndentationStyle
      {
      public:
          MyFavoriteIndentationStyle(unsigned short* arg1, int arg2, std::string& arg3, verylongenumtype arg4);
          ~MyFavoriteIndentationStyle();
          
          static bool Foo1(int arg1, void* arg2);
          virtual verylongenumtype Foo2();
          
      private:
          bool m_bFoo1;
          unsigned int m_nVeryLongFoo2;
      }


    2.
    ExpandedWrap disabled
      class MyFavoriteIndentationStyle
      {
      public:
          MyFavoriteIndentationStyle(
              unsigned short* arg1,
              int arg2,
              std::string& arg3,
              verylongenumtype arg4);
          ~MyFavoriteIndentationStyle();
          
          static bool Foo1(int arg1,
              void* arg2);
          virtual verylongenumtype Foo2();
          
      private:
          bool         m_bFoo1;
          unsigned int m_nVeryLongFoo2;
      }


    3.
    ExpandedWrap disabled
      class MyFavoriteIndentationStyle
      {
      public:
          MyFavoriteIndentationStyle(
              unsigned short*     arg1,
              int                 arg2,
              std::string&        arg3,
              verylongenumtype    arg4);
          ~MyFavoriteIndentationStyle();
          
          static bool Foo1(
              int                 arg1,
              void*               arg2);
          virtual verylongenumtype Foo2();
      private:
          bool            m_bFoo1;
          unsigned int    m_nVeryLongFoo2;
      }


    4.
    ExpandedWrap disabled
      class MyFavoriteIndentationStyle
      {
      public:
          MyFavoriteIndentationStyle      (unsigned short* arg1,
                                           int arg2,
                                           std::string& arg3,
                                           verylongenumtype arg4);
          ~MyFavoriteIndentationStyle     ();
          
          static bool                 Foo1(int arg1,
                                           void* arg2);
          virtual verylongenumtype    Foo2();
          
      private:
          bool                        m_bFoo1;
          unsigned int                m_nVeryLongFoo2;
      }



    Наверняка найдётся много тех, кто использует часть оформления из одного варианта, часть из другого. В этом случае просьба голосовать за наиболее близкий
    А если уж совсем не совпало, тогда см. последний вариант выбора
    Сообщение отредактировано: B.V. -
      1, превращающийся в 2 при большом числе аргументов.
        Проголосовал за 1. В действительности public/private у меня тоже отделены от левого края на пару пробелов/Tab.
          Цитата OpenGL @
          1, превращающийся в 2 при большом числе аргументов.

          :victory:
          Аналогично :)

          Добавлено
          Цитата Славян @
          В действительности public/private у меня тоже отделены от левого края на пару пробелов/Tab.

          Да, сорри, этого не учёл. Такое тоже встречалось
            ExpandedWrap disabled
              class MyFavoriteIndentationStyle {
              public:
                  MyFavoriteIndentationStyle(unsigned short* arg1, int arg2, std::string& arg3, verylongenumtype arg4);
               
                  ~MyFavoriteIndentationStyle();
               
                  static bool Foo1(int arg1, void* arg2);
               
                  virtual verylongenumtype Foo2();
               
                  private:
                      bool m_bFoo1;
                      unsigned int m_nVeryLongFoo2;
              }
            Сообщение отредактировано: Gonarh -
              Цитата OpenGL @
              1, превращающийся в 2 при большом числе аргументов.

              Тоже самое. Еще бывает циклы и алгоритмы так же как во 2 - разношу если слишком длинная строка получается.
                Проголосил за "свой вариант". Но ближе вариант 3:

                ExpandedWrap disabled
                  class MyFavoriteIndentationStyle {
                    public:
                      MyFavoriteIndentationStyle(
                          unsigned short**** Arg1,
                                     int     ArgLong2,
                             std::string&    ArgLongLongLongLong3,
                        verylongenumtype     ArgLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong);
                      ~MyFavoriteIndentationStyle();
                  }

                Форматирование аргументов в стиле киношных титров - новая фишка, пока экспериментирую.
                  ExpandedWrap disabled
                    // Интерфейс объектов синхронизации
                    class ISynkObject
                    {
                    public:
                      virtual DWORD lock  (DWORD=INFINITE)=0;        // блокировка
                      virtual BOOL  unlock()              =0;        // освобождение
                    };
                     
                    // Интерфейс объектов синхронизации для межпроцессного использования
                    // Захват и освобождение ресурса наследуются
                    class TIPSynk: public ISynkObject
                    {
                    protected:
                      HANDLE synkObject;
                     
                       TIPSynk()         : synkObject(INVALID_HANDLE_VALUE){}
                       TIPSynk(HANDLE so): synkObject(so)                  {}
                      ~TIPSynk() { if (synkObject != INVALID_HANDLE_VALUE) CloseHandle(synkObject); }
                     
                      // Присваивание существующего объекта (подсчёт ссылок ведёт ОС)
                      BOOL     assign(HANDLE src);
                     
                    public:
                      // получить объект синхронизации
                      operator HANDLE() const { return synkObject; }
                      // захват
                             DWORD lock(DWORD timeOut = INFINITE);
                      // множественное ожидание
                      static DWORD wait(BOOL all, DWORD timeOut, const std::vector<HANDLE>& synks);
                    };
                    О! Это ещё лучше:
                    ExpandedWrap disabled
                      // Простой врапер над IDispatch без использования ITypeInfo
                      class Wrapper
                      {
                      protected:
                        IDispatch *autoObj;   // указатель на интерфейс автообъекта; дать доступ производным классам
                       
                      private:
                        // простая обёртка над IDispatch::Invoke()
                        HRESULT AutoWrap(WORD autoType, Variant *result, const std::wstring& strName,
                                         const initializer_list& args = initializer_list());
                        // вспомогательная функция для чтения свойства
                        Variant OleProperty(const std::wstring& name, WORD action)
                        {
                          Variant x;
                       
                          AutoWrap(action, &x, name);
                          return x;
                        }
                        // вспомогательная функция для чтения/записи свойства с параметрами
                        Variant OleProperty(const std::wstring& name, WORD action, const initializer_list& args)
                        {
                          Variant x;
                       
                          AutoWrap(action, &x, name, args);
                          return x;
                        }
                       
                      public:
                        /* Конструктор указателем на интерфейс. obj должен быть не NULL.
                           Формально тут должен быть подсчёт ссылок, однако не все автообъекты увеличивают счётчик
                           одинаково, поэтому это оставлено производным классам. */
                        explicit Wrapper(IDispatch* obj): autoObj(obj)
                        {
                          if (autoObj == NULL) throw std::runtime_error("Automation: IDispatch is NULL");
                        }
                        /* Освободить автообъект. Уменьшение счётчика нужно делать всегда. */
                       ~Wrapper() { autoObj->Release(); }
                       
                        /* Вызов методов IDispatch.
                           res  - возвращаемое значение; может быть NULL, если не интересует;
                           name - имя метода для вызова;
                           args - набор параметров для метода;
                                  опционален, по умолчанию пуст, но если присутствует, параметры должны быть указаны
                                  в обратном порядке.
                           Возвращает признак успешного вызова. */
                        HRESULT OleMethod(Variant *res, const std::wstring& name, const initializer_list& args = initializer_list())
                        {
                          return AutoWrap(DISPATCH_METHOD, res, name, args);
                        }
                       
                        /* Чтение свойства IDispatch.
                           name - имя свойства.
                           Возвращает значение свойства. При ошибке вернёт VT_EMPTY, но отчитается в лог. */
                        Variant OlePropertyGet(const std::wstring& name)
                        {
                          return OleProperty(name, DISPATCH_PROPERTYGET);
                        }
                       
                        /* Чтение свойства IDispatch с параметром.
                           name - имя свойства.
                           Возвращает значение свойства. При ошибке вернёт VT_EMPTY, но отчитается в лог. */
                        Variant OlePropertyGet(const std::wstring& name, const initializer_list& args)
                        {
                          return OleProperty(name, DISPATCH_PROPERTYGET, args);
                        }
                       
                        /* Установка свойства IDispatch.
                           name - имя свойства.
                           При ошибке отчитается в лог, поведение свойства зависит от реализации IDispatch. */
                        void OlePropertyPut(const std::wstring& name, Variant val)
                        {
                          OleProperty(name, DISPATCH_PROPERTYPUT, initializer_list() << val);
                        }
                      }
                      Я не парюсь. Visual Studio сама делает нужные отступы.
                      А ешё у нее есть функция "Отформатировать доkумент".
                        Цитата Qraizer @
                        О! Это ещё лучше:

                        А, собственно, чем?
                          Показательностью предпочтений.
                            А можно помечать, что это вы опять о своих плюсах, а?

                            ...потому что во всех современных языках давно уже есть стандарты :jokingly:
                              Отсутствие пометки весьма явно указывает, что плюсы есть самый что ни на есть стандарт.

                              ...а "все современные языки" являются аки геи в гейропе :oops:
                                Цитата Serafim @
                                ...потому что во всех современных языках давно уже есть стандарты

                                В расте нет :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0435 ]   [ 17 queries used ]   [ Generated: 28.03.24, 16:35 GMT ]