慕姐8265434
我有一个基于迭代元组:#include <tuple>#include <utility> #include <iostream>template<std::size_t I = 0, typename... Tp>inline typename std:
:enable_if<I == sizeof...(Tp), void>::type
print(std::tuple<Tp...>& t)
{ }template<std::size_t I = 0, typename... Tp>inline typename std::enable_if<I < sizeof...(Tp), void>::type
print(std::tuple<Tp...>& t)
{
std::cout << std::get<I>(t) << std::endl;
print<I + 1, Tp...>(t);
}intmain(){
typedef std::tuple<int, float, double> T;
T t = std::make_tuple(2, 3.14159F, 2345.678);
print(t);}通常的想法是使用编译时递归。事实上,这个想法被用来制作一个类型安全的printf,正如在最初的元组论文中所指出的那样。这可以很容易地推广到for_each元组:#include <tuple>#include <utility> template<std::size_t I = 0, typename FuncT, typename... Tp>inline typename std:
:enable_if<I == sizeof...(Tp), void>::type
for_each(std::tuple<Tp...> &, FuncT) // Unused arguments are given no names.
{ }template<std::size_t I = 0, typename FuncT, typename... Tp>inline typename std::enable_if<I < sizeof...(Tp), void>::type
for_each(std::tuple<Tp...>& t, FuncT f)
{
f(std::get<I>(t));
for_each<I + 1, FuncT, Tp...>(t, f);
}虽然这需要一些努力FuncT对元组可能包含的每个类型表示具有适当重载的内容。如果您知道所有元组元素都将共享一个公共基类或类似的东西,这是最好的。