c++ - 如何访问 integer_sequence 的第 n 个值?

标签 c++ c++14

这个问题在这里已经有了答案:





template parameter packs access Nth type and Nth element

(5 个回答)


2年前关闭。




我想知道如何访问 std::integer_sequence 的第 n 个值.例如给定一个类型

using foo = std::integer_sequence<int, 3, 1, 4>;

我想要类似的东西
auto i = get<foo, 2>(); // i = 4

标准库中有什么东西可以做到这一点吗?如果不是,如果我希望它在 C++14(而不是 C++17)中工作,我是否需要求助于迭代解决方案?

最佳答案

据我所知,没有这样的内置方法,但您可以自己用几行简洁的代码实现它,而无需任何迭代:

template<class T, T... Ints>
constexpr T get(std::integer_sequence<T, Ints...>, std::size_t i) {
    constexpr T arr[] = {Ints...};
    return arr[i];
}

在这里查看它是如何工作的:https://godbolt.org/z/yAfMeg

可以使用更多代码将参数提升为模板参数(以匹配您的示例)。

关于c++ - 如何访问 integer_sequence 的第 n 个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53223910/

相关文章:

c++ - 制作一个值类型是 C++ 中的抽象类的映射

c++ - std::chrono time_t转换溢出?

c# - 将 C++ 迁移到 C#(回调)

c++ - 边界框方向

c++ - 使用 constexpr 编译时间哈希

c++ - boost::spirit qi::uint_有效数字范围

c++ - 无法为 C++ 方法添加性能探针

c++ - 在通用 lambda 表达式的所有实例之间共享的局部静态变量

c++ - 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串?

c++ - 内存屏障作用域