变量模板部分特化& c ++ 14中的别名

时间:2015-07-15 00:14:27

标签: c++ c++14 variable-templates

我正在尝试将以下数组的位掩码转换为更紧凑的版本。

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的声明/定义应该是什么?

0 个答案:

没有答案