首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Constexpr循环,不包含任何constexpr内容。

Constexpr循环,不包含任何constexpr内容。
EN

Stack Overflow用户
提问于 2017-08-13 08:30:33
回答 1查看 600关注 0票数 3

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

代码语言:javascript
复制
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不是

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

我希望找到一个函数,它将允许我在hana内部对我的元组的每个成员执行一个函数。类似于hana::transform的东西,但对于void。

我并不期望在找到如何使用Hana时遇到困难,我是否应该像以前那样使用专门化?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-13 10:15:29

要在data上迭代,您可以这样做

代码语言:javascript
复制
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中

代码语言:javascript
复制
template < typename ... Ts >
void  foo(Ts ... data) {
    (static_cast<void>(container_c[data].foo2()), ...);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45658526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档