注册 登录
编程论坛 C++教室

求助!一道小程序

crazy23 发布于 2007-09-06 22:49, 1202 次点击

#include "stdafx.h"
#include <iostream.h>
using namespace std;

template <int N>
class A
{
enum
{
result=N+A<N-1>::result
};
};
template<>
class A<0>
{
enum{result=0};
};

int _tmain(int argc, _TCHAR* argv[])
{
printf("%d",A<100>::result);
return 0;
}
这个我是在VS2003下编译的,思想就是这段程序的思想,问题是这些所用到的方法是什么,有点不懂,能解释下吗?说明其作用,还有错哪了?谢谢

12 回复
#2
aipb20072007-09-06 23:23

是个递归吧,这种写法比较少见,

我不知道正确否。

#3
crazy232007-09-07 07:20
回复:(aipb2007)是个递归吧,这种写法比较少见,我...

template<int N>
class A{
enum {result=N+A<N-1>::result};
};
template<>
class A<0>{

enum{result=0};
};
void main(void)
{
printf("%d",A<100>::result);
}
能不能就是先给我解释一下那枚举,为什么要那么定义呢?还有就是定义一个类,类里面是一个枚举,此时类里面的枚举又怎么是class A{enum {result=N+A<N-1>::result};};这样定义的呢?还有就是下面的class A<0>{enum{result=0};};A<0>这是什么东西呀,再加上这输出printf("%d",A<100>::result);A<100>::result不懂呀!

#4
virusswb2007-09-07 13:26
建议看c++中的模板
#5
crazy232007-09-07 14:20

看过了,可是那的内容不多就是为了解决函数重载的问题,其它的就没有什么了

#6
cince2007-09-07 23:14
概念问题!
买书去。或者去图书馆
#7
江湖之神2007-09-08 13:23
#8
流川枫22007-09-09 12:24
以下是引用crazy23在2007-9-7 7:20:37的发言:

template<int N>
class A{
enum {result=N+A<N-1>::result};
};
template<>
class A<0>{

enum{result=0};
};
void main(void)
{
printf("%d",A<100>::result);
}
能不能就是先给我解释一下那枚举,为什么要那么定义呢?还有就是定义一个类,类里面是一个枚举,此时类里面的枚举又怎么是class A{enum {result=N+A<N-1>::result};};这样定义的呢?还有就是下面的class A<0>{enum{result=0};};A<0>这是什么东西呀,再加上这输出printf("%d",A<100>::result);A<100>::result不懂呀!

printf("%d",A<100>::result);A<100>::result是C的输出吧。。。
怎么C++还要用这个啊???

#9
冰的热度2007-09-09 13:53
怪问题,没见过......
#10
weishj2007-09-09 18:25

我的理解:
这是一个类似递归的类,cout<<A<100>::result<<endl;这句的意思好象是求0+1+2+...+100的值
但里面为什么用枚举我就有点晕了
[CODE]
template<int N>
class A
{
public:
static inline int fun()
{
return N + A<N-1>::fun() ;
}
};

template<>
class A<0>
{
public:
static inline int fun()
{
return 0;
}
};[/CODE]
这样不是挻爽的嘛,干嘛用枚举呢

#11
故事2007-09-09 19:04
俺也没见过
用cout多简单
#12
sunkaidong2007-09-11 10:04
摸板问题,外加递归.其实也不是很难理解啊
#13
hc20082007-09-11 10:20

学习一下,谢谢啊

1