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

标签 c++ c++11 templates variadic-templates

我有以下功能:

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 模板参数功能将对此有所帮助。参见 Advantages of auto in template parameters in C++17

关于c++ - 推断可变模板参数包元素的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412548/

相关文章:

c++ - 为什么 boost intrusive list 的 push_back 函数需要左值?

templates - Golang http/模板变量

c++ - 二进制搜索树类 - 标识符 "ItemType"未定义

c++ - end() 是否需要在 STL 映射/集中保持不变?

c++ - 我可以默认此 Transform 模板函数的返回类型吗?

c++ - c++11 中的 brace-init 是否存在任何效率问题?

c++ - gcc 与 clang、msvc 和 icc : Is this function call ambiguous?

c++ - 就 SFINAE 而言,访问不存在的成员是否不被视为 "error"?

c++ - C++中字符串数组中最长的字符串

c++ - 为什么类类型的静态和全局变量是危险的?