Я борюсь с идиомой 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
Модули C++20 и идиома PIMPL ⇐ C++
Программы на C++. Форум разработчиков
1729913744
Anonymous
Я борюсь с идиомой PIMPL с модулями C++20. Я использую стороннюю библиотеку, которую не хочу раскрывать пользователю библиотеки. Я создал следующую суть, чтобы показать необходимые файлы: https://gist.github.com/mickes27/524e57c7fa95ac221be0b5ea8a9f4003. Я использую CMake, CMakeLists.txt включен. Я обнаружил несколько проблем:
[*]Я не могу назвать [b]InternalPartition.ixx[/b], потому что получил [b]ошибку C7622: модуль Расширение файла интерфейса несовместимо с «/module:internalPartition», поскольку этот раздел не является интерфейсом[/b]. Я предполагаю, что это какие-то внутренние вещи MSVC, что только интерфейсные модули (тот, у которого есть ключевое слово экспорта, могут иметь расширение .ixx).
[*]Когда я импортирую [b]InternalPartition[/b] в [b]MyLibrary.cpp[/b] (единица реализации модуля), я получил ошибку [b]MyLibrary.cpp(12): ошибка C2027: использование неопределенного типа 'lib: :Внутренний'[/b]. Я предположил (возможно, ошибочно), что класс, объявленный в интерфейсном блоке основного модуля, и класс, определенный во внутреннем разделе, одинаковы и должны быть видимы (после импорта).
< li>Когда я попытался избавиться от предварительного объявления и импортировать [b]InternalPartition[/b] прямо в [b]MyLibrary.ixx[/b], я получил: [b]Ошибка CMake: исходный код общедоступного модуля C++ Для MyLibrary.ixx требуется модуль MyLibrary:InternalPartition C++, который предоставляется частным источником[/b], но я не хочу делать внутренний раздел частью общедоступного модуля, какой тогда смысл в том, чтобы он был внутренним?
[*]Если я вообще попытаюсь избавиться от внутренних разделов и рассматривать [b]InternalPartition.cpp[/b] как файл реализации модуля (< strong>module MyLibrary; вместо [b]module MyLibrary:InternalPartition;[/b]), мы возвращаемся к pt. 2 - Internal нигде не указан (не имеет значения, объявлю ли я его в [b]MyLibrary.ixx[/b] или нет).
Есть ли у кого-нибудь идеи, как я могу использовать модули PIMPL idiom + C++20 без необходимости объявлять внутренний класс непосредственно внутри MyLibrary.cpp?
Подробнее здесь: [url]https://stackoverflow.com/questions/79079188/c20-modules-and-pimpl-idiom[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия