Модули C++20 и идиома PIMPLC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Модули C++20 и идиома PIMPL

Сообщение Anonymous »

Я борюсь с идиомой PIMPL с модулями C++20. Я использую стороннюю библиотеку, которую не хочу раскрывать пользователю библиотеки. Я создал следующую суть, чтобы показать необходимые файлы: https://gist.github.com/mickes27/524e57 ... ea8a9f4003. Я использую CMake, CMakeLists.txt включен. Я обнаружил несколько проблем:

[*]Я не могу назвать InternalPartition.ixx, потому что получил ошибку C7622: модуль Расширение файла интерфейса несовместимо с «/module:internalPartition», поскольку этот раздел не является интерфейсом. Я предполагаю, что это какие-то внутренние вещи MSVC, что только интерфейсные модули (тот, у которого есть ключевое слово экспорта, могут иметь расширение .ixx).

[*]Когда я импортирую InternalPartition в MyLibrary.cpp (единица реализации модуля), я получил ошибку MyLibrary.cpp(12): ошибка C2027: использование неопределенного типа 'lib: :Внутренний'. Я предположил (возможно, ошибочно), что класс, объявленный в интерфейсном блоке основного модуля, и класс, определенный во внутреннем разделе, одинаковы и должны быть видимы (после импорта).

< li>Когда я попытался избавиться от предварительного объявления и импортировать InternalPartition прямо в MyLibrary.ixx, я получил: Ошибка CMake: исходный код общедоступного модуля C++ Для MyLibrary.ixx требуется модуль MyLibrary:InternalPartition C++, который предоставляется частным источником, но я не хочу делать внутренний раздел частью общедоступного модуля, какой тогда смысл в том, чтобы он был внутренним?

[*]Если я вообще попытаюсь избавиться от внутренних разделов и рассматривать InternalPartition.cpp как файл реализации модуля (< strong>module MyLibrary; вместо module MyLibrary:InternalPartition;), мы возвращаемся к pt. 2 - Internal нигде не указан (не имеет значения, объявлю ли я его в MyLibrary.ixx или нет).


Есть ли у кого-нибудь идеи, как я могу использовать модули PIMPL idiom + C++20 без необходимости объявлять внутренний класс непосредственно внутри MyLibrary.cpp?

Подробнее здесь: https://stackoverflow.com/questions/790 ... impl-idiom
Ответить

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

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

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

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

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