Разрешены ли единицы реализации для разделов модулей C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Разрешены ли единицы реализации для разделов модулей C++?

Сообщение Anonymous »

Я работаю над небольшим проектом, в котором экспериментирую с модулями C++. Моя структура следующая:
  • math.ixx -> Модуль интерфейса основного модуля
  • math.cpp -> Модуль реализации модуля интерфейса основного модуля
  • math_utils.ixx -> Раздел интерфейса модуля
  • math_utils.cpp -> Модуль реализации раздела интерфейса модуля
math зависит от math_utils.
Код выглядит следующим образом:
math.ixx:

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

export module math;
export import :math_utils;

export namespace ns {
class IMath {
Constructor ...
};
}
math.cpp:

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

module math;

namespace ns {
class Math : public IMath {
public:
Math() : math(CreateMathUtils()) {}

private:
std::unique_ptr utils;
};
math_utils.ixx:

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

export module math:math_utils;

export namespace ns {
class IMathUtils {
public:
virtual std::string foo() = 0;
};

std::unique_ptr CreateMathUtils();
}
Вот где возникает проблема:
math_utils.cpp:

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

module math:math_utils;
// import :math_utils ?

namespace ns {
class MathUtils : IMathUtils {
public:
std::string foo() override { return foo; }

private:
std::string foo;
};

std::unique_ptr CreateMathUtils() {
return std::unique_ptr(new MathUtils());
}
Строка import :math_utils; похоже, не работает. Я получаю много ошибок компиляции, например, "'IMathUtils': базовый класс не определен".
Мой вопрос: невозможно ли реализовать модуль реализации для раздела модуля?
Моя среда:
  • Visual Studio 2022 Версия 17.14.14
  • CMake Версия: 3.31.3
  • Версия набора инструментов: v143


Подробнее здесь: https://stackoverflow.com/questions/798 ... partitions
Ответить

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

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

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

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

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