Просмотр сообщений
|
Страниц: [1] 2 3 ... 58
|
1
|
Qt / Qt-инструментарий / Re: Автоматическое форматирование кода
|
: Сентябрь 28, 2020, 14:16
|
да, о хедерах я не подумал=)
Если проект собирается CMake'ом, то более подробную структуру проекта можно получить с помощью cmake-file-api, там и хидеры и исходники перечислены. Сгенерировать структуру проекта не сложно, но я бы не сказал, что просто и тривиально, одной командой не отделаешься. Проще будет каким-нибудь find'ом в папке проекта список файлов получить. В самом креаторе явно есть средства, чтобы получить все файлы проекта и скопом их отформатировать. Но вот такую фичу для него, похоже, ещё никто не запилил.
|
|
|
2
|
Qt / Qt-инструментарий / Re: Автоматическое форматирование кода
|
: Сентябрь 28, 2020, 13:54
|
Есть же compilation database и jq. Выцепить файлы проекта задача тривиальная, нет? Как один из вариантов получения списка файлов проекта, может быть и тривиальная. Но в compilation database разве не только *.cpp файлы перечислены? Можно её сгенерировать так, чтобы и *.h тоже там были?
|
|
|
6
|
Программирование / С/C++ / Re: Default constructor
|
: Июль 06, 2020, 12:16
|
На мой взгляд, лучше делать это явно: C++ (Qt) struct CDrawInst { // data CMaterial * m_material = nullptr; int m_count = 0; ... };
Можно, конечно, перестраховаться, но Value initialization: This is the initialization performed when a variable is constructed with an empty initializer. ... The effects of value initialization are: 1) if T is a class type with no default constructor or with a user-provided or deleted default constructor, the object is default-initialized; 2) if T is a class type with a default constructor that is neither user-provided nor deleted (that is, it may be a class with an implicitly-defined or defaulted default constructor), the object is zero-initialized and then it is default-initialized if it has a non-trivial default constructor; 3) if T is an array type, each element of the array is value-initialized; 4) otherwise, the object is zero-initialized. Так что int m_count{} должно в 0 инициализироваться.
|
|
|
7
|
Программирование / С/C++ / Re: Default constructor
|
: Июль 06, 2020, 11:44
|
Заметим что по приведенной ссылке конкретно приведенного Вами примера нет (как-то не очень хорошо документируют) По приведённой ссылке примеры, что поля класса в принципе можно инициализировать (начиная с С++11). А способов инициализации в С++ до фига, и в них чёрт ногу сломит . Например, агрегат можно целиком "занулить" так (без явной инициализации полей класса): C++ (Qt) struct CDrawInst { // data CMaterial * m_material; int m_count; ... }; void test() { CDrawInst inst{}; assert(inst.m_material == nullptr); assert(inst.m_count == 0); }
Но если CDrawInst перестанет быть агрегатом: C++ (Qt) struct CDrawInst { CDrawInst() {}; // data CMaterial * m_material; int m_count; ... };
то "зануление" inst в такой форме записи ( CDrawInst inst{};) может и не происходить.
|
|
|
8
|
Программирование / С/C++ / Re: Default constructor
|
: Июль 05, 2020, 14:48
|
CDrawInst() = default это делает? Или это уже и так делается с новыми стандартами? Нет. Вопрос был можно ли как-то занулять "автоматом", как делают template для указателей, int и др Совсем автоматом нельзя, надо скобочки руками писать ( Member initialization.): C++ (Qt) struct CDrawInst { // data CMaterial * m_material{}; int m_count{}; ... };
|
|
|
9
|
Программирование / С/C++ / Re: C++ Object Token Library
|
: Июнь 30, 2020, 11:02
|
А вообще нужна обёртка-токен над объектом-по-месту? Есть варианты использования, когда без неё тяжко?
Она нужна только для обеспечения однообразия интерфейса доступа к значению, чтобы вариант heap_* легко можно было заменить на inplace_* при необходимости. Кстати, добавил в библиотеку raw::unique[_single] и raw::unique_optional для "inplace-объектов".
|
|
|
15
|
Qt / Вопросы новичков / Re: html-форматирование в QTableView
|
: Май 21, 2020, 16:47
|
Честно говоря столько времени "убил" на эту тему... А еще нужно сделать сохранение в разных форматах и справку... Может когда-нибудь я к этому вернусь. Там может делов на: C++ (Qt) style->drawItemText(&painter, lr.toRect(), flags, opt.palette, isEnabled(), d->text, foregroundRole());
Если не смущает, что в paint() каждый раз создаётся и уничтожается QLabel, то можно не заморачиваться. Но меня бы это, как минимум, насторожило.
|
|
|
|
|