正文

metaprogam用法一例2005-09-14 18:15:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/soliddream/4743.html

分享到:

meta progamming(元编程) 是C++中非常有趣的一个功能 计算 1!+2!+3!+4!+ ...+n!, 如果用metaprogam完成则非常的有趣,代码如下: template<size_t n> struct factorial {     enum{ val = n * factorial<n-1>::val }; }; template<> struct factorial<1> {     enum{ val = 1 }; };   #include <iostream> using namespace std; int main( void ) {     cout << factorial<1>::val           + factorial<2>::val           + factorial<3>::val           + factorial<4>::val           + factorial<5>::val << endl;           return 0; }   它和普通的写法有什么区别呢?区别在于普通的写法其结果是在运行时计算的,而metaprogam写法其结果却是在编译时计算的,不会占用任何运行时间. 上面的代码其实就等同于 int main( viod ) {     cout << 153 << endl;     return 0; } 但如果直接写153的话,不但需要自己用笔来计算,而且没有可扩展性. 还可以继续简化: template<size_t n> struct factorial {     enum{ val = n * factorial<n-1>::val }; }; template<> struct factorial<1> {     enum{ val = 1 }; };   template<size_t n> struct factorial_acc {     enum{ val = factorial<n>::val + factorial_acc<n-1>::val }; }; template<> struct factorial_acc<1> {     enum{ val = factorial<1>::val }; };   #include <iostream> using namespace std; int main( void ) {     cout << factorial_acc<5>::val << endl;       return 0; }  

阅读(3125) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册