解压可变参数并相应地传递它的元素
unpack variadic arguments and pass it's elements accordingly
假设我得到一个包含两个静态成员变量的结构,即 Coord
,然后将其作为可变参数模板函数的参数传递 variadic_print_coord()
,如何解压可变参数表达式,以调用print_pair()
函数如下所示。
template<class T1, class T2>
void print_pair(T1 t1, T2 t2)
{
std::cout << t1 << " and " << t2 << '\n';
}
template<class T1, class T2, class ...Ts>
void print_pair(T1 t1, T2 t2, Ts... ts)
{
print_pair(t1, t2);
print_pair(ts... );
}
template<int X, int Y>
struct Coord
{
static const int valueX = X;
static const int valueY = Y;
}
template<class... COORDs>
void variadic_print_coord()
{
print_pair(COORD1::valueX, COORD1::valueY, COORD2::valueX, COORD2::valueY, ...,
COORDs::valueX, COORDs::valueY);
//how could I manipulating the pack expressions to get something like this
}
int main()
{
print_pair<Coord<0,1>, Coord<2,3>, Coord<4,5>>();
//result:
//0 and 1
//2 and 3
//4 and 5
}
非常感谢!
您可以使用以下涉及折叠表达式的构造
template<class... COORDs>
void variadic_print_coord()
{
(print_pair(COORDs::X, COORDs::Y), ...);
}
在这种情况下,您不需要 print_pair
的可变版本,因为调用基本上是解耦的。
#include <iostream>
template<class T1, class T2>
void print_pair(T1 t1, T2 t2)
{
std::cout << t1 << " and " << t2 << '\n';
}
template<int X, int Y>
struct Coord
{
static const int valueX = X;
static const int valueY = Y;
};
template<class... COORDs>
void variadic_print_coord()
{
(print_pair(COORDs::valueX, COORDs::valueY), ...);
}
int main()
{
variadic_print_coord<Coord<0,1>, Coord<2,3>, Coord<4,5>>();
//result:
//0 and 1
//2 and 3
//4 and 5
}
假设我得到一个包含两个静态成员变量的结构,即 Coord
,然后将其作为可变参数模板函数的参数传递 variadic_print_coord()
,如何解压可变参数表达式,以调用print_pair()
函数如下所示。
template<class T1, class T2>
void print_pair(T1 t1, T2 t2)
{
std::cout << t1 << " and " << t2 << '\n';
}
template<class T1, class T2, class ...Ts>
void print_pair(T1 t1, T2 t2, Ts... ts)
{
print_pair(t1, t2);
print_pair(ts... );
}
template<int X, int Y>
struct Coord
{
static const int valueX = X;
static const int valueY = Y;
}
template<class... COORDs>
void variadic_print_coord()
{
print_pair(COORD1::valueX, COORD1::valueY, COORD2::valueX, COORD2::valueY, ...,
COORDs::valueX, COORDs::valueY);
//how could I manipulating the pack expressions to get something like this
}
int main()
{
print_pair<Coord<0,1>, Coord<2,3>, Coord<4,5>>();
//result:
//0 and 1
//2 and 3
//4 and 5
}
非常感谢!
您可以使用以下涉及折叠表达式的构造
template<class... COORDs>
void variadic_print_coord()
{
(print_pair(COORDs::X, COORDs::Y), ...);
}
在这种情况下,您不需要 print_pair
的可变版本,因为调用基本上是解耦的。
#include <iostream>
template<class T1, class T2>
void print_pair(T1 t1, T2 t2)
{
std::cout << t1 << " and " << t2 << '\n';
}
template<int X, int Y>
struct Coord
{
static const int valueX = X;
static const int valueY = Y;
};
template<class... COORDs>
void variadic_print_coord()
{
(print_pair(COORDs::valueX, COORDs::valueY), ...);
}
int main()
{
variadic_print_coord<Coord<0,1>, Coord<2,3>, Coord<4,5>>();
//result:
//0 and 1
//2 and 3
//4 and 5
}