2012-03-30 40 views
0
template<int n> 
struct Numberim{ 
    enum{ value = Numberim<n-1>::value + n }; 
}; 

template<> 
struct Numberim<0>{ 
    enum{ value = 0 }; 
}; 

这是一个简单的tmp示例,它没问题;模板元编程时结构和类之间的区别

template<int n> 
class Numberim{ 
    enum{ value = Numberim<n-1>::value + n }; 
}; 

template<> 
class Numberim<0>{ 
    enum{ value = 0 }; 
}; 

我用G ++编译,并抱怨......然而,据我所知,struct和class几乎在对待同一way.just这样“在C++中,之间的唯一区别结构和类是默认情况下结构成员是公共的,并且类成员默认是私有的。“

那么,他们在地球上有什么不同?

+1

'它抱怨.'-它怎么抱怨? – 2012-03-30 04:25:47

+0

你为什么认为有区别? – josephthomas 2012-03-30 04:25:49

+0

@Jesse g ++说这样的“错误:'Numberim <22> :: Numberim <22> ::价值'是私人的',好吧...我想我很天真地问这个问题。谢谢。 – 2012-03-30 04:30:01

回答

0

混凝土类Numberim<1>与具体类Numberim<0>无关。

因此,具有一个类引用其它’ S的value作品定义时valuepublic,它是为struct,而不是当valueprivate,它是用于class

可以使用friend机制,也可以使value公开,或者你可以更简单地说,做到这一点:

template<int n> 
class Numberim{ 
    enum{ value = n*(n+1)/2 }; 
    // And whatever else you want in here. 
}; 
0

的差异仍然是一样的,当它试图编译Numberim<n-1>::valuen=1它试图使用模板专业化。但是,由于valueprivateNumberim<0>的成员(因为类成员变量默认为private),因此会给编译器带来错误。

相关问题