Раньше у меня были такие заголовки:
Код: Выделить всё
#include "glm/vec2.h"
struct Foo
{
glm::vec2 myvec;
};
Теперь вместо включения заголовков glm я решил создать glm_module.cppm и экспортировать определения векторных типов, поэтому у меня есть:
Код: Выделить всё
module;
#include "glm/vec2.h"
export module glm_module;
export using myvec2 = glm::vec2;
И это довольно заурядное преобразование в модули. И это работает. Однако теперь, поскольку мои векторные типы находятся в модуле, а не в заголовках, которые нужно включить, очевидно, теперь я бы хотел включить свой файл заголовка:
Код: Выделить всё
//#include "glm/vec2.h" // REMOVE THIS, NO LONGER INCLUDING
import glm_module;
class Foo
{
myvec2 myvector;
};
Я думаю, это нормально, однако этот заголовок, содержащий Foo, представьте, что теперь я хочу включить этот заголовок в модуль. SomeOtherModule.cppm:
Код: Выделить всё
module;
#include "header_which_defines_foo.h"
export module SomeOtherModule;
Теперь, поскольку «header_that_defines_foo.h» «импортирует glm_module», я по сути импортирую glm_module во фрагмент глобального модуля:
Код: Выделить всё
module;
#include "header_which_defines_foo.h" // THIS IS THE GLOBAL MODULE FRAGMENT
export module SomeOtherModule;
И я слышал, что вы не можете импортировать фрагмент глобального модуля. Разве это невозможно?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... e-fragment