当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++14 std::integer_sequence用法及代码示例


编程时,开发人员经常需要循环和迭代。有时,需要循环遍历跨度未知的数字范围,std::integer 序列在这种情况下很有用。

通过使用C++14提供的std::integer_sequence,可以在编译时创建一个整数序列。程序在运行之前就知道整数的序列。有了这个工具,就可以进行模板编程,meta-programming,让编码变得不那么复杂。

当 std::integer_sequence 用作函数模板的参数时,可以推导表示元素序列的参数包 Ints 并将其用于包扩展。

用法

template <typename T, T... Ints>
struct integer_sequence;

其中 struct 用于用 Ints 中给定的值定义整数序列。

模板参数

  • T:它是整数的类型。
  • Ints:它是一个整数参数包。

会员函数

  • size():它返回由参数包 Ints 表示的元素序列中的元素数量。

std::integer_sequence 的示例

示例 1:

在下面的代码中,我们将利用上述语法来演示 C++ 14 中 std::integer_sequence 的使用。

C++


#include <iostream> 
#include <utility> 
using namespace std; 
  
template <typename T, T... Is> 
void print_sequence(integer_sequence<T, Is...>) 
{ 
    cout << "The sequence is: "; 
    ((cout << Is << ' '), 
     ...); // fold expression to print sequence 
} 
  
int main() 
{ 
    print_sequence(integer_sequence<int, 1, 2, 3, 4>{}); 
    return 0; 
}

输出

The sequence is: 1 2 3 4

解释:

在此代码中,std::integer 序列参数被传递给在此代码中定义的 print_sequence 函数。然后该函数打印其值。通过使用折叠表达式将序列打印在由空格分隔的单行上。

示例 2:

在下面的代码中,integer_sequence_size 结构体使用模板专门化来递归计算integer_sequence 的大小。

C++


#include <iostream> 
#include <utility> 
using namespace std; 
  
// Struct to calculate the size of an integer_sequence 
template <typename T, T... Ints> 
struct integer_sequence_size; 
  
// Partial specialization for an integer_sequence with at 
// least one element 
template <typename T, T Head, T... Tail> 
struct integer_sequence_size<T, Head, Tail...> { 
    static constexpr size_t value 
        = 1 + integer_sequence_size<T, Tail...>::value; 
}; 
  
// Specialization for an empty integer_sequence 
template <typename T> struct integer_sequence_size<T> { 
    static constexpr size_t value = 0; 
}; 
  
int main() 
{ 
    // Define an integer_sequence 
    using my_sequence 
        = integer_sequence<int, 0, 1, 2, 3, 4>; 
  
    // Print the size of the integer_sequence using the 
    // custom struct 
    std::cout 
        << "Size: "
        << integer_sequence_size<int, 0, 1, 2, 3, 4>::value 
        << endl; 
    // Output: Size: 5 
  
    return 0; 
}
输出
Size: 5

在 C++ 14 中使用 std::integer_sequence 的优点是:

  • 简化模板元编程:通过提供一种生成编译时整数序列的简单方法,std::integer 序列简化了 C++14 中的模板元编程。它减少了混乱和不准确的递归模板函数的必要性。
  • 提高可读性:通过使用 std::integer 序列,您可以编写更简单的代码,因为它消除了对复杂模板函数调用的要求。
  • 启用包扩展:Std::integer 序列允许扩展参数包,从而能够创建高效的代码。此外,它还能够处理大量模板参数。


相关用法


注:本文由纯净天空筛选整理自krishna_97大神的英文原创作品 std::integer_sequence in C++ 14。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。