Как модули C ++ скрывают детали реализации, когда они находятся в том же файле, что и интерфейс?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как модули C ++ скрывают детали реализации, когда они находятся в том же файле, что и интерфейс?

Сообщение Anonymous »

Я читаю bjarne stroustrup s тур C ++ ( 3drd издание), которое обеспечивает краткое введение в C ++ 20 функции. В книге он показывает, как модуль экспорта может традиционный паттерн необходимости декоративных объявлений и определений в отдельный заголовок () и источник () файлы [/b]. В своей книге он представляет модуль класса с домашним вектором , чтобы объяснить его точку зрения:

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

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; Supposed to be hidden
Vector::Vector(int s) : elem{new double[s]}, sz{s} {}
double& Vector::operator[](int i) { return elem[i]; }
int Vector::size() { return sz; }
Традиционно нам приходилось отдельные файлы заголовков для обнаружения подписей функций (чтобы потребители нашей библиотеки знали, как их называть) и .cpp файлы для скрытия реализаций. однако , с модулями, это выглядит как все сидит в одном и том же файле.
my Вопрос : Как экспорт в одном файле модуля фактически скрывает реализацию от пользователей библиотеки? Если реализация находится в том же файле, что и интерфейс, разве это не позволяет пользователям (или любому потребляющему компилятору) «см.« Все, просто изучив файл модуля? < /P>
Другой способ, если я все помесчу (как общедоступный интерфейс, так и частная реализация) в один файл модуля, как мне на самом деле скрыть свой частный код от клиентов, , уведомляя человеческих разработчиков о своей подписи функции, объявлении и т. Д.>

Подробнее здесь: https://stackoverflow.com/questions/793 ... me-file-as
Ответить

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

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

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

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

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