在 C++11 中,是否可以在编译时使用运行时甚至编译时限制条件进行 for 循环?

穆罕默德·阿里

我想知道在 C++11 中是否可以在编译时使用运行时甚至编​​译时限制条件进行 for 循环?我从一个愚蠢的尝试开始,找出我需要什么。

for (uint32_t i = 0; i < n; ++i)
  {
    templated_func<i>();
  }

考虑我有一个带有私有成员变量 n 的类,我想调用一个具有不同编号的模板函数,该函数从 0 到 n 迭代(对于运行时限制条件)我已经研究过“模板元编程”和“Constexpr If”(c++17)但我没有得到任何结果,有人可以帮助我吗?

最大66

我想知道是否有可能在编译时有一个 for 循环和运行时甚至在 c++11 中的编译时限制条件

我不知道在运行时条件下使用此类循环的合理方法。

使用编译时条件...如果您至少可以使用 C++14,则可以使用基于std::integer_sequence/ std::make_integer_sequence(请参阅 Caleth 答案)或std::index_sequence/ std::make_index_sequence(稍微综合一点)的解决方案。

如果您受限于 C++11,您可以为std::index_sequence/创建一个代理,std::make_index_sequence或者您可以创建一个带有静态函数的递归模板结构(不幸的是,您可以部分特化模板函数,但您可以部分特化类和结构)。

我的意思是......如下

template <std::size_t I, std::size_t Top>
struct for_loop
 {
   static void func ()
    {
      templated_func<I>();
      for_loop<I+1u, Top>::func();
    }
 };

template <std::size_t I>
struct for_loop<I, I>
 { static void func () { } };

你可以打电话

constexpr auto n = 10u;

for_loop<0, n>::func();

如果您想templated_func()使用从零到n-1u.

不幸的是,此解决方案是递归的,因此您可能会遇到编译器递归限制的问题。那就是......只有在n不高时才有效

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模板函数中的C ++ 11 for循环

来自分类Dev

C ++ 11自动编译时间或运行时?

来自分类Dev

C ++ 11自动编译时间或运行时?

来自分类Dev

将C ++(11)中的constexpr的值赋给const var时,是否始终保证在编译时对其进行“计算”?

来自分类Dev

将C ++(11)中的constexpr的值赋给const var时,是否始终保证在编译时对其进行“计算”?

来自分类Dev

C ++ 11 for cin >> buff的循环;

来自分类Dev

基于范围的循环:自动更改在C ++ 11中的含义

来自分类Dev

C ++ 11对动态数组使用“基于范围的for循环”(每个)

来自分类Dev

使用C ++ 11 for()循环遍历vector <unique_ptr <mytype >>

来自分类Dev

在Qt中正确使用基于C ++ 11范围的for循环

来自分类Dev

在C ++ 11 foreach循环中获取索引

来自分类Dev

防止C ++ 11删除无限循环

来自分类Dev

C ++ 11 for循环语法无法正常工作

来自分类Dev

防止C ++ 11删除无限循环

来自分类Dev

C ++ 11多维数组的范围循环

来自分类Dev

如何将C ++ 11循环转换为传统循环?

来自分类Dev

在C ++中以在编译时和运行时都可用的方式描述像素格式信息

来自分类Dev

在编译时在C ++元编程中使用运行时参数(变量)

来自分类Dev

在编译时生成类型列表-没有C ++ 11

来自分类Dev

如何有条件地跳过 C++ 11 中 for 循环的后期操作?

来自分类Dev

我们可以在C ++ 11中擦除基于范围的for循环中的项目吗

来自分类Dev

可以将基于范围的for循环与恒定整数值(C ++ 11)一起使用

来自分类Dev

使用带有右值range-init的C ++ 11基于范围的for循环是否安全?

来自分类Dev

C ++ 11线程与OpenMP进行简单并行循环。什么时候

来自分类Dev

C ++中的FOR(限制循环!)

来自分类Dev

在C ++ 11中的循环中为函数的返回值分配内存:如何优化?

来自分类Dev

在C ++ 11中的循环中为函数的返回值分配内存:如何优化?

来自分类Dev

在c ++ 11中哪个范围循环(自动,自动和,常量自动和)更有效

来自分类Dev

用范围运算符替换C循环-分段错误:11什么时候使用?链式

Related 相关文章

  1. 1

    模板函数中的C ++ 11 for循环

  2. 2

    C ++ 11自动编译时间或运行时?

  3. 3

    C ++ 11自动编译时间或运行时?

  4. 4

    将C ++(11)中的constexpr的值赋给const var时,是否始终保证在编译时对其进行“计算”?

  5. 5

    将C ++(11)中的constexpr的值赋给const var时,是否始终保证在编译时对其进行“计算”?

  6. 6

    C ++ 11 for cin >> buff的循环;

  7. 7

    基于范围的循环:自动更改在C ++ 11中的含义

  8. 8

    C ++ 11对动态数组使用“基于范围的for循环”(每个)

  9. 9

    使用C ++ 11 for()循环遍历vector <unique_ptr <mytype >>

  10. 10

    在Qt中正确使用基于C ++ 11范围的for循环

  11. 11

    在C ++ 11 foreach循环中获取索引

  12. 12

    防止C ++ 11删除无限循环

  13. 13

    C ++ 11 for循环语法无法正常工作

  14. 14

    防止C ++ 11删除无限循环

  15. 15

    C ++ 11多维数组的范围循环

  16. 16

    如何将C ++ 11循环转换为传统循环?

  17. 17

    在C ++中以在编译时和运行时都可用的方式描述像素格式信息

  18. 18

    在编译时在C ++元编程中使用运行时参数(变量)

  19. 19

    在编译时生成类型列表-没有C ++ 11

  20. 20

    如何有条件地跳过 C++ 11 中 for 循环的后期操作?

  21. 21

    我们可以在C ++ 11中擦除基于范围的for循环中的项目吗

  22. 22

    可以将基于范围的for循环与恒定整数值(C ++ 11)一起使用

  23. 23

    使用带有右值range-init的C ++ 11基于范围的for循环是否安全?

  24. 24

    C ++ 11线程与OpenMP进行简单并行循环。什么时候

  25. 25

    C ++中的FOR(限制循环!)

  26. 26

    在C ++ 11中的循环中为函数的返回值分配内存:如何优化?

  27. 27

    在C ++ 11中的循环中为函数的返回值分配内存:如何优化?

  28. 28

    在c ++ 11中哪个范围循环(自动,自动和,常量自动和)更有效

  29. 29

    用范围运算符替换C循环-分段错误:11什么时候使用?链式

热门标签

归档