Объявление глобальных констант может быть удобным, но не простым в 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
Это то, что нужно делать, или я что-то упустил?