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

标签 c++ templates tuples

比如我有一个元组

tuple<int, float, char> t(0, 1.1, 'c');

和一个模板函数

template<class T> void foo(T e);

我想用函数循环元组元素,如何实现它,比如使用 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));
    ...
}

最佳答案

您可以像这样使用 boost::fusion::for_each:

#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);
}

关于c++ - 如何在编译时循环一个元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19074723/

相关文章:

c++ - SFINAE + decltype 的 g++ 4.7 错误?

python - 无法为元组列表中的数据返回无

python - 将元组插入元组

sql - MS Access 2003 中 IN 子句中的元组

c++ - 从 cmake 文件运行 npm 命令

c++ - omp_get_max_threads() 在并行区域返回 1,但它应该是 8

c++ - 如何从文件加载const变量的内容?

c++ - 如何编写 C++ 类成员函数包装器?

C++ 模板友元运算符与另一个类似的运算符

c++ - 如何仅在对象恰好有成员函数时才调用它?