@Acaunt

Как правильно организовать модули C++?

Недавно узнал про модули в C++. Это как раз то, что мне не хватало в начале изучения языка (например ограничение видимости некоторых вспомогательных функций).

В одной из статьей Microsoft нашел следующий список модулей:
Экспериментальная библиотека разделена на следующие именованные модули:

std.regex предоставляет содержимое заголовка regex
std.filesystem предоставляет содержимое заголовка filesystem
std.memory предоставляет содержимое заголовка memory
std.threading содержит содержимое заголовков atomic, condition_variable, future, mutex, shared_mutex, и thread
std.core все остальное доступно в стандартной библиотеке C ++


Но при попытке их использовать у меня был доступ только к модулям std и std.compat

Немного поискав информацию нашел на какой-то статье в Хабре про обзор новых добавленных возможностях стандарта C++23 информацию:
В стандартную библиотеку добавили первый полноценный модуль. Теперь всю библиотеку можно подключить одной строчкой import std;
Если вы привыкли смешивать код на C++ с кодом на C и используете C-функции из глобального namesapce, то специально для вас сделали модуль std.compat.


Как раз те, что я смог использовать. Я так понимаю список Microsoft был лишь пробой пера, а когда стандарт вроде как утвердили то удалили те модули из списка. (Или я чего то не понял).

Также у меня сложилось такое впечатление, что эти модули ещё нигде не используют, скорее всего из-за того, что это ещё новая и не опробованная полностью штука. Хотя фича довольно таки прикольная. А такое мнение сложилось из-за того что информации в интернете я нашёл крайне мало, как и примеров использования.

Ещё не совсем понял как следует реализовать модуль на несколько файлов. Например объявление класса и его методов, а в другом реализация этих же методов.

Также не совсем понял с расширением файлов. Например Microsoft рекомендует использовать *.ixx, в других компиляторах видел *.cxx, *.c++ и т.д.

Ещё вопрос стоит ли начинать полностью делать проект используя только модули вместо старого привычного #include?

П.С. Можете написать ваше мнение про данную возможность языка и используете ли вы их?
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Не использую просто потому, что модули плохо устаканились. Посмотрел по MinGW — всё ещё экспериментальная функциональность.
Для стандартных модулей: если поддерживаете Си++23, то пожалуйста. Это обычно главный источник медленной компиляции. Мой проект пока только 20.
Для сторонних библиотек: можно прямо сейчас, если они собраны в модуль. Ни одной такой пока не видел, тем более в G++, как я сказал, это пока эксперимент.
Для собственных модулей: убедитесь, что их поддерживает система сборки. В Си++26 усилят требования к модулям, потому что взвыли разработчики этих самых систем. И, как я сказал, в G++ модули — всё ещё эксперимент.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы