- 论坛徽章:
- 0
|
#include <iostream>;
// primary template to compute sqrt(N)
template <int N, int LO=1, int HI=N>;
class Sqrt {
public:
// compute the midpoint, rounded up
enum { mid = (LO+HI+1)/2 };
// search a not too large value in a halved interval
enum { result = (N<mid*mid) ? Sqrt<N,LO,mid-1>;::result
: Sqrt<N,mid,HI>;::result };
};
// partial specialization for the case when LO equals HI
template<int N, int M>;
class Sqrt<N,M,M>; {
public:
enum { result = M };
};
int main()
{
std::cout << "Sqrt<23456>;::result = " << Sqrt<23456>;::result
<< '\n';
std::cout << "Sqrt<25>;::result = " << Sqrt<25>;::result
<< '\n';
std::cout << "Sqrt<42>;::result = " << Sqrt<42>;::result
<< '\n';
std::cout << "Sqrt<1>;::result = " << Sqrt<1>;::result
<< '\n';
}
如果你没有发现编译器死了, 那么祝贺你! 你的机器很强劲! 以上代码摘自《 C++ Templates - The Complete Guide》 |
|