随笔 - 477  文章 - 813  trackbacks - 0
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678


子曾经曰过:编程无他,唯手熟尔!
feedsky
抓虾
pageflakes
Rojo
狗狗
google reader
bloglines
my yahoo
newsgator
netvibes
鲜果


Locations of visitors to this page

常用链接

留言簿(66)

随笔分类(616)

随笔档案(477)

相册

BCB

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

积分与排名

  • 积分 - 276884
  • 排名 - 5

最新随笔

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

// 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 七星重剑 阅读(852) 评论(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
二分法比较慢,能不能写个牛顿迭代法或者秦九韶法?  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
.NET频道  博客园社区  闪存
网站导航: