jeudi 3 novembre 2016

inferring type of variadic template parameter pack element

I have following function:

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)];
}

That is called just so:

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

Is it possible to re-define it in such a way to I don't need to specify T explicitly? So that it is called just so:

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

Aucun commentaire:

Enregistrer un commentaire