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

Gho*_*der 0 c++ templates variadic-templates c++11

我有以下功能:

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)];
}
Run Code Online (Sandbox Code Playgroud)

这就是这样称呼的:

MyEnum val = random_value<MyEnum, MyEnum::val1, MyEnum::val2, MyEnum::val3>(rnd);
Run Code Online (Sandbox Code Playgroud)

是否有可能以这种方式重新定义它,我不需要明确指定T?因此它被称为:

MyEnum val = random_value<MyEnum::val1, MyEnum::val2, MyEnum::val3>(rnd);
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

目前还没有,但是auto在C++ 17中添加的新模板参数功能将有助于此.请参阅C++ 17中模板参数中auto的优点