Код: Выделить всё
.hКод: Выделить всё
.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; 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; }
Мой вопрос: : Как экспорт в одном файле модуля фактически скрывает реализацию от пользователей библиотеки? Если реализация находится в том же файле, что и интерфейс, разве это не позволяет пользователям (или любому компилятору-потребителю) «видеть» все, просто заглянув в файл модуля?
Проще говоря, другой способ, если я помещу все (и общедоступный интерфейс, и частную реализацию) в один файл модуля, как мне на самом деле скрыть свой личный код от клиентов, уведомляя при этом разработчиков-людей > сигнатуры функции, объявления и т. д. Разве текстовый заголовочный файл все еще не нужен? Меня особенно беспокоит практическое распространение библиотеки с закрытым исходным кодом.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ile-as-the
Мобильная версия