Image
Image

elecintop

+ 关注

粉丝 3     |     主题 176     |     回帖 1329

C++模板元编程(C++ template metaprogramming)
2018-12-17 16:34
  • 万利电子
  • 89
  • 9710
  上面代码看似很好,不仅整合了代码,借助类成员的访问控制,还隐藏了实现细节。不过它存在着很大问题,如果 ...  
  上面用三个函数模板 IntSwap()、 IntBubbleSortLoop()、 IntBubbleSort() 来实现一个排序功能,不但显得分 ...  
  上述结果表明,模板元编程实现的循环展开能够达到和手动循环展开相近的性能(90% 以上),并且性能是循环版 ...  
  对循环次数固定且比较小的循环语句,对其进行展开并内联可以避免函数调用以及执行循环语句中的分支,从而可 ...  
  5. 循环展开 文献[11]展示了一个循环展开(loop unrolling)的例子 — 冒泡排序: ...  
  上面例子中,定义一个类的整型常量,可以用 enum,也可以用 static const int,需要注意的是 enum 定义的常 ...  
  为了展现编译期数值计算的强大能力,下面是一个更复杂的计算:最大公约数(Greatest Common Divisor,GCD) ...  
  WHILE_ 的使用示例见下面:  
  IF_ 的使用示例见下面:  
  4. 模板下的控制结构 模板实现的条件 if 和 while 语句如下(文献[9]):  
  从这个例子我们也可以窥探 C++ 模板元编程的函数式编程范型,对比结构化求和程序:for(i=0,sum=0; i ...  
  当编译器遇到 sumt 时,试图实例化之,sumt 引用了 sumt 即 sumt,试图实例化 sumt,以此类推,直到 sumt, ...  
  到目前为止,虽然已经看到了阶乘、求和等递归数值计算,但都没涉及原理,下面以求和为例讲解 C++ 模板编译 ...  
  上面的编译输出信息只给出了前一部分,虽然信息很杂,但还是可以看到其中有 10 以内全部素数:2、3、5、7( ...  
  下面的代码在原来程序基础上稍作了修改(GCC 4.8 下使用 -fpermissvie,只显示警告信息): ...  
  3. 编译期数值计算 第一个 C++ 模板元程序是 Erwin Unruh 在 1994 年写的(文献[14]),这个程序计算小于 ...  
  C++ 模板元编程概览框图如下(取自文献[9]):  
  代码示意如下:  
  从编程形式来看,模板的“”中的模板参数相当于函数调用的输入参数,模板中的 typedef 或 static const 或 ...  
  从编程范型(programming paradigm)上来说,C++ 模板是函数式编程(functional programming),它的主要特 ...  
2
3
近期访客