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几乎以同样的方式处理。就像这样“在C ++中,结构和类之间的唯一区别结构成员默认是公共的,默认情况下类成员是私有的。“
那么,他们在地球上的区别是什么?
答案 0 :(得分:3)
差异将与典型的class vs struct相同。您的第一个示例(使用struct)将公开您的“值”,第二个示例(使用类)将公开您的“值”。
有关类和结构之间差异的参考,请参阅What are the differences between struct and class in C++。
答案 1 :(得分:0)
具体类Numberim<1>
与具体类Numberim<0>
无关。
因此,当value
为value
时,有一个类引用另一个类public
的定义,它适用于struct
,但不适用于value
是private
,它是class
。
您可以使用friend
机制,也可以将value
公开,或者您可以更简单地执行此操作:
template<int n>
class Numberim{
enum{ value = n*(n+1)/2 };
// And whatever else you want in here.
};
答案 2 :(得分:0)
差异仍然相同,当它尝试使用Numberim<n-1>::value
编译n=1
时,它会尝试使用模板特化。但是,由于value
是private
的{{1}}成员(默认情况下类成员变量为Numberim<0>
),因此会给编译器错误。