C++ Template Parameter Packs with sequence
Simple Explanation
sequence<x,x,x> is a template that holds a compile-time list of integer values. It's like a
tuple but for numbers only, and the values are fixed at compile time. It's commonly used in
template metaprogramming to pass multiple integer parameters to other templates.
Simple Usage Example
.
#include <iostream>
// A simple sequence template that holds compile-time integers
template<int... Values>
struct sequence {
static constexpr int size = sizeof...(Values);
// Function to print all values
static void print() {
((std::cout << Values << " "), ...); // C++17 fold expression
std::cout << std::endl;
}
};
// Template that uses sequence to create arrays
template<typename T, int... Dims>
class MultiArray {
private:
static constexpr int total_size = (Dims * ...); // multiply all dimensions
T data[total_size];
public:
MultiArray() {
std::cout << "Created array with dimensions: ";
((std::cout << Dims << "x"), ...);
std::cout << " = " << total_size << " elements" << std::endl;
}
static constexpr int get_total_size() { return total_size; }
};
int main() {
// Create sequences with different values
sequence<1, 8> block_warps; // 1 block, 8 warps
sequence<16, 16, 8> tensor_dims; // 16x16x8 tensor
sequence<2, 4, 8, 16> powers_of_2; // sequence of powers
std::cout << "Block warps: ";
block_warps.print(); // Output: 1 8
std::cout << "Tensor dims: ";
tensor_dims.print(); // Output: 16 16 8
std::cout << "Powers of 2: ";
powers_of_2.print(); // Output: 2 4 8 16
// Use sequence values as template parameters
MultiArray<float, 10, 20> matrix2d; // 10x20 = 200 elements
MultiArray<int, 4, 4, 4> tensor3d; // 4x4x4 = 64 elements
return 0;
}
..
Output:
Block warps: 1 8
Tensor dims: 16 16 8
Powers of 2: 2 4 8 16
Created array with dimensions: 10x20x = 200 elements
Created array with dimensions: 4x4x4x = 64 elements
Thank you. π
No comments:
Post a Comment