2016-09-01 3 views
0

Мне интересно, должны ли иметь числовые константы как переменные constexpr или ::std::integral_constant<>? Пример:числовые константы как типы или переменные в контейнере?

template <typename T> 
struct container 
{ 
    static constexpr ::std::size_t const size = 16; 
}; 

template <typename T> 
struct container 
{ 
    using size = ::std::integral_constant<::std::size_t, 16>; 
}; 

я склоняюсь больше к ::std::integral_constant подхода, поскольку статической переменной constexpr может потребоваться определение в файле .cpp где-то.

+0

Примечание: пространство имен 'std' зарезервировано, вам не нужно ':: std' –

+0

Меньше, чем лучше. Не используйте 'std :: integral_constant'. –

+0

Элемент 'value'' std :: integ_constant' (который вам нужно использовать для доступа к значению) является 'static constexpr'. Поэтому, на мой взгляд, для того, что вы хотите сделать, 'std :: integral_constant' просто долгий путь для создания' constexpr'. –

ответ

2

Я лично считаю, что лучший вариант - это старомодный перечислитель. constexpr склонен к использованию ODR, а integral_constant слишком много печатает (вы всегда можете создать его, если вам это понадобится где-то позже в коде).

+0

или, в наши дни, класс перечисления. – user1095108

+0

@ пользователь1095108, я так не думаю. Когда перечисления используются как интегральные константы внутри класса, класс enum просто добавляет беспорядок. – SergeyA

+0

дайте хороший небольшой пример, пожалуйста. – user1095108

Смежные вопросы