没有 constexpr 内容的 Constexpr 循环
Constexpr loop with a no constexpr content
我想使用 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,但您可以假设我没有编译器限制。
要遍历您的 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()), ...);
}
我想使用 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,但您可以假设我没有编译器限制。
要遍历您的 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()), ...);
}