Constexpr环路与无constexpr内容
问题描述:
我想用升压花生成这个最终代码:Constexpr环路与无constexpr内容
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::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()), ...);
}
'花:: for_each' –
@JasonRice我怎么没能找到它在hana文档中...感谢您的评论!但问这个问题还是个好主意,因为我最终得到了一个更好的解决方案(我认为)。 –