3

我想使用 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,我应该像过去那样使用专业吗?

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

4

1 回答 1

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()), ...);
}
于 2017-08-13T10:15:29.397 回答