Использование модулей С++20
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.58] |
|
|
Использование модулей С++20
|
Сообщ.
#1
,
|
|
|
|
Начиная с C++20 (и дальше в C++23/C++26) в языке официально появились модули (modules), которые позволяют строить проект без классического разделения на заголовочные (.h/.hpp) и файлы реализации (.cpp). Что-то подобное на реализацию кода в Object Pascal/Delphi, с разделением на блоки описания интерфейса и реализации в одном файле исходного кода.
Пример: ![]() ![]() // MyModule.cppm export module MyModule; import <string>; // - - - - - - - > Как "interface" в Delphi export class Person { public: Person(std::string name); void greet() const; private: std::string name_; }; // - - - - - - - > Как "implementation" в Delphi Person::Person(std::string name) : name_(std::move(name)) {} void Person::greet() const { // ... } |
|
Сообщ.
#2
,
|
|
|
|
Так и до begin/end скоро дойдут...
Извиняюсь за офтоп |
|
Сообщ.
#3
,
|
|
|
|
Уже 6 лет как. std::ranges:
![]() ![]() std::vector<int> arr; /* ... */ std::ranges::sort(arr); |
|
Сообщ.
#4
,
|
|
|
|
Цитата SergeyIT @ Так и до begin/end скоро дойдут... Извиняюсь за офтоп Можно не ждать, уже давно можно ![]() ![]() #define БЭГИН { #define ЭНД } #define ЕСЛИ if #define ЕСЛИ_НЕ else #define СЛИВАЙ_КЕРОСИН return #include <iostream> int main() БЭГИН int ФЛАГ = 1; ЕСЛИ (ФЛАГ ==1) БЭГИН std::cout << "Привет, мир!\n"; ЭНД ЕСЛИ_НЕ БЭГИН СЛИВАЙ_КЕРОСИН 1; ЭНД ЭНД Только вопрос был в друом: почему в |
|
Сообщ.
#5
,
|
|
|
|
Ку-ку ептель
А вот c Qt в этом плане проблемсы. Там один из этапов - предобработка исходного кода с помощью MOC (мета-объектный компилер). А он не в зуб ногой про модули. Бида и пичаль! Но есть и хорошая новость (относительно хорошая), в файлах проекта, если не использовать Q_OBJECT - все будет по фэн-шую. Современные средства сборки (типа cmake, qbs) поддерживают смешанный синтаксис - старые варики с заголовками и реализацией, и новые модульные, и это всё можно смешивать! Добавлено Qraizer, ну ты хоть проголосуй, пажалуста!!! |
|
Сообщ.
#6
,
|
|
|
|
Ну ок, проголосил.
Я честно пытался найти модулям применение и не нашёл. Модули требуют иной модели декомпозиции, и она не пересекается с привычной. ИМХО единственный плюс модулей в отсутствии необходимости предоставлять компилятору интерфейсы в текстовом виде, что, впрочем, вполне понятно, ибо ему вполне достаточно деревьев грамматического разбора. Но недостаточно человеку, который использует этот модуль, и ему не обойтись без документации. Каковую <заголовки> вполне себе могут предоставить, если правильно организованы. В убогом виде модули уже давно присутствуют в некоторых средствах разработки в лице предкомпилированных заголовков. Так что те, кто их использовал в своих проектах, прекрасно знают про ограничения и правила правильной организации, иначе профита от них не будет, и относительно дёшево могут заменить их на модули. Мне эти правила никогда не нравились, я их и не использовал. Модули могут легко использоваться в новых проектах, если сразу начать их проектировать с их учётом, но уже имеющиеся проекты на модули переносить нет никаких резонов. |
|
Сообщ.
#7
,
|
|
|
|
Только собираюсь попробовать. Раньше когда подступался, всегда были проблемы с инструментами, то в ide что-то не так, то в системе сборки, то компиляторы разные по-разному делали. Надеюсь, что сейчас уже можно спокойно применять.
|
|
Сообщ.
#8
,
|
|
|
|
Цитата D_KEY @ Только собираюсь попробовать. Раньше когда подступался, всегда были проблемы с инструментами, то в ide что-то не так, то в системе сборки, то компиляторы разные по-разному делали. Надеюсь, что сейчас уже можно спокойно применять. Надеюсь, что уже достаточно времени прошло, чтобы эти недочёты исправили. |