可变模板参数包元素的推断类型

inferring type of variadic template parameter pack element

本文关键字:元素 类型 参数 包元素      更新时间:2023-10-16

我有以下功能:

template <typename T, T... Ts> T random_value(default_random_engine &rnd)
{
    static constexpr T values [] { Ts... };
    static uniform_int_distribution<size_t> distribution(0, sizeof...(Ts) - 1);
    return values[distribution(rnd)];
}

就是这么叫的

MyEnum val = random_value<MyEnum, MyEnum::val1, MyEnum::val2, MyEnum::val3>(rnd);

是否可以重新定义它,这样我就不需要显式地指定T了?因此它被称为:

MyEnum val = random_value<MyEnum::val1, MyEnum::val2, MyEnum::val3>(rnd);

目前还没有,但是在c++ 17中添加的新的auto模板参数特性将有助于解决这个问题。参见c++模板参数中auto的优点