M
M_maker's code
@mmakecode64 подп.
190просмотров
4 мая 2025 г.
Score: 209
Сегодня я хотел бы поговорить о модулях в C++. Язык C++ был создан на основе языка C, и поэтому он унаследовал от него многие особенности — прежде всего, препроцессор и концепцию разделения заголовочных и исходных файлов. Чтобы разделить код на несколько файлов с помощью препроцессора, необходимо создать заголовочный файл с определениями всех функций или методов классов, а затем исходный файл с их реализацией. Если попытаться объединить определения и реализации в одном файле и использовать его в нескольких местах, это приведет к ошибке компиляции из-за множественных реализаций. Компилятор не сможет определить, какую именно реализацию использовать. Проще говоря, использование директивы препроцессора #include представляет собой копирование содержимого включаемого файла в файл, в который он включается. Однако в C++ 20 завезли модули, которые не требует разделение на два файла. Я уже это протестировал. // TestModule.cppm export module TestModule; namespace TestModule { export double Add(double a, double b) { return a + b; } export double var = 401.56; export class ITest { public: ITest() {} virtual ~ITest() {} virtual int GetValue() const { return 0; } }; } // main.cpp #include <iostream> import TestModule; class CTest : public virtual TestModule::ITest { public: CTest() { std::cout << "Starting the application..." << std::endl; } ~CTest() { std::cout << "Shutting down the application" << std::endl; } int GetValue() const override { return 42; } }g_Test; int main() { auto result = TestModule::Add(1.2, 65.7 + static_cast<double>(g_Test.GetValue() * TestModule::var)); std::cout << "Result: " << result << std::endl; } Мне кажется, что это очень удобно, так как не надо разделять модуль на определение и реализацию, что значительно упрощает разработку. А вы как думаете? Пишите своё мнение в комментариях.
190
просмотров
1878
символов
Нет
эмодзи
Нет
медиа

Другие посты @mmakecode

Все посты канала →
Сегодня я хотел бы поговорить о модулях в C++. Язык C++ был — @mmakecode | PostSniper