Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在编译时循环一个元组?_C++_Templates_Tuples - Fatal编程技术网

C++ 如何在编译时循环一个元组?

C++ 如何在编译时循环一个元组?,c++,templates,tuples,C++,Templates,Tuples,例如,我有一个元组 tuple<int, float, char> t(0, 1.1, 'c'); 元组t(0,1.1,'c'); 和一个模板函数 template<class T> void foo(T e); 模板无效foo(te); 我想用函数循环tuple元素,如何实现它,比如使用boost::mpl::for_each来实现以下内容 template<class Tuple> void loopFoo(Tuple t) { foo&l

例如,我有一个元组

tuple<int, float, char> t(0, 1.1, 'c');
元组t(0,1.1,'c'); 和一个模板函数

template<class T> void foo(T e);
模板无效foo(te);
我想用函数循环tuple元素,如何实现它,比如使用boost::mpl::for_each来实现以下内容

template<class Tuple>
void loopFoo(Tuple t)
{
    foo<std::tuple_element<0, Tuple>::type>(std::get<0>(t));
    foo<std::tuple_element<1, Tuple>::type>(std::get<1>(t));
    foo<std::tuple_element<2, Tuple>::type>(std::get<2>(t));
    ...
}
模板
void loopFoo(元组t)
{
foo(std::get(t));
foo(std::get(t));
foo(std::get(t));
...
}

您可以使用boost::fusion::for_,如下所示:

#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/adapted/std_tuple.hpp>

struct LoopFoo
{
  template <typename T> // overload op() to deal with the types
  void operator()(T const &t) const
  {
    /* do things to t */
  }
};

int main()
{
  auto t = std::make_tuple(0, 1.1, 'c');
  LoopFoo looper;
  boost::fusion::for_each(t, looper);
}
#包括
#包括
结构LoopFoo
{
模板//重载op()以处理类型
void运算符()(T常量&T)常量
{
/*对t做些事情*/
}
};
int main()
{
auto t=std::make_tuple(0,1.1,'c');
活套;
boost::fusion::for_each(t,looper);
}

可能重复@JohnZwinck:问题范围更广,这导致了相当复杂的答案(与下面nurettin的答案相比)。