如何转换int参数包

How to transform int parameter pack

给定一个模板

template <int... Ints>
struct FixedArray;

如何实现将每个整数值乘以给定数字的元函数?

template <int A, typename F>
struct Mul;

Mul<2, FixedArray<5, 7, 8>>::type

相同
FixedArray<10, 14, 16>

为此,您可以先定义一个空的Mul class:

template<int A, typename T>
struct Mul;

然后为 FixedArray 创建专业:

template<int A, int ... Ints>
struct Mul<A, FixedArray<Ints...>>
{
    using type = FixedArray<(Ints * A)...>;
};

但是,我宁愿在 FixedArray 中有一个 typedef,所以生成的语法对我来说看起来更自然:

template <int ... Ints>
struct FixedArray
{
    template<int A>
    using Mul = FixedArray<(Ints * A)...>;
};

static_assert(std::same_as<FixedArray<1,2,3>::Mul<2>, FixedArray<2,4,6>>);