随笔 - 505  文章 - 1034  trackbacks - 0
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


子曾经曰过:编程无他,唯手熟尔!

常用链接

留言簿(94)

随笔分类(649)

随笔档案(505)

相册

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

积分与排名

  • 积分 - 905232
  • 排名 - 14

最新随笔

最新评论

阅读排行榜

评论排行榜

// IfThenElse.hpp
1
  #pragma once
 2 
 3 template<bool C>, typename Ta, typename Tb>
 4 class IfThenElse;
 5 
 6 template<typename Ta, typename Tb>
 7 class IfThenElse<true, Ta, Tb>
 8 {
 9 public:
10      typedef Ta ResultT;
11 };
12 
13 template<typename Ta, typename Tb>
14 class IfThenElse<false, Ta, Tb>
15 {
16 public:
17      typedef Tb ResultT;
18 };

//
这个IfThenElse模板估计以后要经常用到
// Sqrt.hpp
#pragma once

#include "IfThenElse.hpp"

 1
 template<int Num, int LOW = 0int HIGH = Num>
 2 class Sqrt
 3 {
 4 public:
 5      // calculate mid value
 6      enum
 7       {
 8           mid = (LOW + HIGH + 1/ 2,
 9      };
10       
11       // 二分法
12       typedef typename IfThenElse< (Num < mid * mid)
13  , Sqrt<Num, LOW, mid - 1>
14  , Sqrt<Num, mid, HIGH> 
15  >::ResultT SubT;
16  
17         enum
18         {
19             result = SubT::result;
20         };
21  };
22  
23  template<int Num, int M>
24  class Sqrt<Num, M, M> // 偏特化,作为终止
25 {
26 public:
27      enum
28      {
29         result = M,
30       };
31 };



让我们测试一下

std::cout<< "Sqrt<25>::result = " << Sqrt<25>::result << std::endl;

posted on 2006-10-27 09:45 七星重剑 阅读(1128) 评论(3)  编辑 收藏 引用 所属分类: PL--c/c++

FeedBack:
# re: [metaprogramming] 求一个数Num的平方根  2006-10-30 09:57 程序有错
17 typedef Ta ResultT;
应为:typedef Tb ResultT;
思路很棒  回复  更多评论
  
# re: [metaprogramming] 求一个数Num的平方根  2006-10-30 20:46 阿来
@程序有错
已经修正,谢谢  回复  更多评论
  
# re: [metaprogramming] 求一个数Num的平方根  2007-04-29 09:40 windywinter
二分法比较慢,能不能写个牛顿迭代法或者秦九韶法?  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理