我想使用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,但您可以假设我没有编译器限制。
答案 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()), ...);
}