Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.188.108.54] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Разгребая по долгу работы чужой код, задумался над вопросом предпочтения разработчиками определённого стиля расстановки отступов.
Выделил несколько наиболее ярких стилей, которые мне повстречались, и свёл их на примере описания класса Итак, 1. 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. 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. 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. 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
,
|
|
|
1, превращающийся в 2 при большом числе аргументов.
|
Сообщ.
#3
,
|
|
|
Проголосовал за 1. В действительности public/private у меня тоже отделены от левого края на пару пробелов/Tab.
|
Сообщ.
#4
,
|
|
|
Цитата OpenGL @ 1, превращающийся в 2 при большом числе аргументов. Аналогично Добавлено Цитата Славян @ В действительности public/private у меня тоже отделены от левого края на пару пробелов/Tab. Да, сорри, этого не учёл. Такое тоже встречалось |
Сообщ.
#5
,
|
|
|
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; } |
Сообщ.
#6
,
|
|
|
Цитата OpenGL @ 1, превращающийся в 2 при большом числе аргументов. Тоже самое. Еще бывает циклы и алгоритмы так же как во 2 - разношу если слишком длинная строка получается. |
Сообщ.
#7
,
|
|
|
Проголосил за "свой вариант". Но ближе вариант 3:
class MyFavoriteIndentationStyle { public: MyFavoriteIndentationStyle( unsigned short**** Arg1, int ArgLong2, std::string& ArgLongLongLongLong3, verylongenumtype ArgLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong); ~MyFavoriteIndentationStyle(); } Форматирование аргументов в стиле киношных титров - новая фишка, пока экспериментирую. |
Сообщ.
#8
,
|
|
|
// Интерфейс объектов синхронизации 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); }; |
Сообщ.
#9
,
|
|
|
О! Это ещё лучше:
// Простой врапер над 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); } } |
Сообщ.
#10
,
|
|
|
Я не парюсь. Visual Studio сама делает нужные отступы.
А ешё у нее есть функция "Отформатировать доkумент". |
Сообщ.
#11
,
|
|
|
Цитата Qraizer @ О! Это ещё лучше: А, собственно, чем? |
Сообщ.
#12
,
|
|
|
Показательностью предпочтений.
|
Сообщ.
#13
,
|
|
|
А можно помечать, что это вы опять о своих плюсах, а?
...потому что во всех современных языках давно уже есть стандарты |
Сообщ.
#14
,
|
|
|
Отсутствие пометки весьма явно указывает, что плюсы есть самый что ни на есть стандарт.
...а "все современные языки" являются аки геи в гейропе |
Сообщ.
#15
,
|
|
|
Цитата Serafim @ ...потому что во всех современных языках давно уже есть стандарты В расте нет |