Шаблон переменной частичной специализации & amp; псевдонимы в C ++ 14

Я пытаюсь преобразовать следующий массив битовых масок в более компактную версию.

template < typename T >
constexpr T length_mask[];

template <>
constexpr uint64 length_mask < uint64 >[] = {
uint64(0)
, ~uint64(0) >> 56
, ~uint64(0) >> 48
, ~uint64(0) >> 40
, ~uint64(0) >> 32
, ~uint64(0) >> 24
, ~uint64(0) >> 16
, ~uint64(0) >> 8
, ~uint64(0) >> 0
};

Вот что у меня есть …

template < typename T, typename I >
constexpr T length_mask_impl[];

template < typename T, std::size_t... I >
constexpr T length_mask_impl < T, std::index_sequence < I... > >[] = {
~T(0), (~T(0) >> ((sizeof(T) - I - 1) * 8))...
};

Я хотел еще больше упростить это для клиентского кода, чтобы им не нужно было выписывать std :: make_index_sequence. Как я могу это сделать? Я не могу понять синтаксис правильно и не уверен, что это будет работать.

template < typename T >
using length_mask < T > = length_mask_impl < T, std::make_index_sequence < sizeof(T) > >;

Это не компилируется. Каким должно быть объявление / определение length_mask?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]