Constexpr循环没有constexpr内容

时间:2017-08-13 08:30:34

标签: c++ metaprogramming boost-hana

我想使用boost hana生成最终代码:

template < typename ... Ts >
void  foo(Ts ... data) {

  constexpr auto tuple = hana::make_tuple(data...);

  //Code that I need to be generate
  container_c[tuple[0_c]].foo2();
  container_c[tuple[1_c]].foo2();
  container_c[tuple[2_c]].foo2();
}

container_c是一个在编译时生成的地图,我不认为这里真的很重要。 foo2不是constexpr

我在考虑使用hana::size(tuple).times,但我需要一个增量,可能使用hana::make_range(hana::size_c<0>, hana::size(tuple))而且我不知道该怎么做。

我希望找到一个函数,它允许我在hana里面对我元组的每个成员执行一个函数。像hana::transform这样的东西,但是对于void lambda。

我不希望在Hana找到如何使用whereIn时遇到困难,我应该像过去一样使用专业化吗?

顺便说一句,我现在正在使用gcc 7.1,但您可以假设我没有编译器限制。

1 个答案:

答案 0 :(得分:4)

要迭代data,您可以

template < typename ... Ts >
void  foo(Ts ... data) {
    int dummy[] = {0, (container_c[data].foo2(), void(), 0)...};
    static_cast<void>(dummy); // Avoid warning for unused variable.
}

或者在C ++ 17中

template < typename ... Ts >
void  foo(Ts ... data) {
    (static_cast<void>(container_c[data].foo2()), ...);
}