Как правильно экспортировать глобальную константу из модуля? - PullRequest
2 голосов
/ 19 октября 2019

Объявление глобальных констант может быть удобным, но не простым в C ++. Например, см. эту недавнюю статью на Fluent C ++ . Это в основном объясняет, как это сделать, но не упоминает модули C ++ 20.

В обычном заголовочном файле на уровне пространства имен я бы объявил константу следующим образом:

// Constants.h
inline constexpr int Count = 42;
inline const std::vector<int> Numbers = { 1, 2, 3 };  // cannot use constexpr

Здесь мне нужно inline, так как символы могут быть включены в несколько единиц перевода. IIUC, модуль определения модуля, экспортирующий символ, является отдельной единицей перевода. Поэтому я бы объявил это просто следующим образом:

// Constants.ixx
export module constants;

export constexpr int Count = 42;
export const std::vector<int> Numbers = { 1, 2, 3 };  // cannot use constexpr

Это то, что нужно делать, или я что-то упустил?

1 Ответ

2 голосов
/ 19 октября 2019

Вы сделали это правильно. Обратите внимание также на важную особенность, которая, как и inline в C ++ 17, зависимости, выраженные через import , ограничивают порядок инициализации (с или без inline) в C ++ 20.

...