Может ли модуль реализации раздела модуля существовать без соответствующего ему интерфейсного модуля?C++

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

Сообщение Anonymous »

В справочнике по C++ приведен пример модуля реализации раздела модуля (AC.cpp), который используется без необходимости определения рядом с ним интерфейсного модуля:

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

/////// A-B.cpp
export module A:B;
...

/////// A-C.cpp
module A:C;
...

/////// A.cpp
export module A;

import :C;
export import :B;

...
Однако в моем коде, скомпилированном с помощью MSVC, первый пример работает, а второй нет:

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

/////// game.ixx
export module game;

import :rendering;

...

/////// rendering.ixx
export module game:rendering;  // this works

...
по сравнению с

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

/////// game.ixx
export module game;

import :rendering;

...

/////// rendering.cpp
module game:rendering;  // this doesn't work

...
Насколько я понимаю, удаление объявления экспорта в rendering.ixx (и изменение расширения обратно на .cpp для MSVC, но я попробовал оба) превращает этот раздел в модуль реализации, и это то, что я хочу сделать, потому что я хочу, чтобы мои функции рендеринга оставались внутренними. Однако я получаю "

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

module partition 'rendering' for module unit 'game' was not found
", когда я это делаю.
(Кроме того, это косвенно, но почему game.ixx не выдает ошибку, потому что я не экспортировал- импортировать раздел :rendering в game.ixx? В справочнике по C++ сказано:)

Разделы модуля могут быть модулями интерфейса модуля ( когда в объявлениях их модулей есть экспорт). Они должны быть экспортированы-импортированы основным модулем интерфейса, и их экспортированные операторы будут видны при импорте модуля.


Подробнее здесь: https://stackoverflow.com/questions/786 ... ding-inter
Ответить

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

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

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

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

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