Как модули C++20 (импорт/экспорт) уменьшают необходимость в отдельных файлах заголовка и реализации и как реализация дейC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как модули C++20 (импорт/экспорт) уменьшают необходимость в отдельных файлах заголовка и реализации и как реализация дей

Сообщение Anonymous »

Я читаю книгу Бьярна Страуструпа A Tour of C++ (3-е издание), в которой представлено краткое введение в возможности C++20. В книге он показывает, как модуль экспорта может устранить традиционную схему разделения объявлений и определений на отдельные заголовки () и источник (

Код: Выделить всё

.cpp) файлы. В своей книге он представляет модуль класса домашнего вектора
, чтобы объяснить свою точку зрения:

Код: Выделить всё

export module Vector; // defining the module called "Vector"

export class Vector {
public:
Vector(int s);
double& operator[](int i);
int size();
private:
double* elem; // elem points to an array of sz doubles
int sz;
};

export bool operator==(const Vector& v1, const Vector& v2) {
if (v1.size() != v2.size())
return false;
for (int i = 0; i < v1.size(); ++i) {
if (v1[i] != v2[i])
return false;
}
return true;
}

//Implementations; Not supposed to be exposed
Vector::Vector(int s) : elem{new double[s]}, sz{s} {}
double& Vector::operator[](int i) { return elem[i]; }
int Vector::size() { return sz; }
Традиционно у нас были отдельные файлы заголовков для предоставления сигнатур функций (чтобы потребители нашей библиотеки знали, как их вызывать) и файлы .cpp для скрытия реализаций. Однако с модулями похоже, что все находится в одном файле. Мой вопрос:
  • Как экспорт в одном файле модуля фактически скрывает реализацию от пользователей библиотеки?
  • Если реализация находится в том же файле, что и интерфейс, разве это не позволяет пользователям (или любому компилятору-потребителю) «видеть» все, просто просматривая в файл модуля?
  • При создании динамической библиотеки (например, .dll или .so) мы обычно полагаемся на файлы заголовков (), чтобы сообщить клиентскому коду сигнатуры функций. Что касается модулей, нам по-прежнему нужен отдельный файл, «эквивалентный заголовку», или интерфейс модуля полностью берет на себя эту роль?
Я пытаюсь чтобы понять, как модули улучшают (или упрощают) дизайн с точки зрения безопасности/инкапсуляции, одновременно информируя компиляторов (и других пользователей) о символах и подписях.

Подробнее здесь: https://stackoverflow.com/questions/793 ... er-and-imp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»