Chinaunix
标题:
你的编译器死了吗?
[打印本页]
作者:
xuejm
时间:
2003-06-13 15:41
标题:
你的编译器死了吗?
#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》
作者:
uiibono
时间:
2003-06-13 23:03
标题:
你的编译器死了吗?
我的死了。
FreeBSD4.7, 内存128M。
作者:
无双
时间:
2003-06-13 23:05
标题:
你的编译器死了吗?
enum { result = (N<mid*mid) ? Sqrt<N,LO,mid-1>;::result
: Sqrt<N,mid,HI>;::result };
应该是这里需要的运算过多
作者:
xuejm
时间:
2003-06-16 11:23
标题:
你的编译器死了吗?
这是对于模板技术的极致应用!
作者:
无双
时间:
2003-06-16 11:37
标题:
你的编译器死了吗?
过犹不及
设计程序时不一定要执意使用某个技术
而是看看它能不能更好的实现你的目标
作者:
xuejm
时间:
2003-06-17 10:59
标题:
你的编译器死了吗?
是啊我在调试这本书上面的示例的时候,也发现了这个问题。对于编译效率和执行效率的权衡也是一个问题。
抛开这个示例的在便是实践上的巨大的浪费,我还是觉得至少它演示了泛型技术的巨大生命力。值得我们去学习。
作者:
无双
时间:
2003-06-17 19:09
标题:
你的编译器死了吗?
想用泛型的话要有泛型设计的思维
这样写才可以写得更好
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2