模板元编程时结构和类之间的区别

时间:2012-03-30 04:22:42

标签: c++ class templates struct

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 ++中,结构和类之间的唯一区别结构成员默认是公共的,默认情况下类成员是私有的。“

那么,他们在地球上的区别是什么?

3 个答案:

答案 0 :(得分:3)

差异将与典型的class vs struct相同。您的第一个示例(使用struct)将公开您的“值”,第二个示例(使用类)将公开您的“值”。

有关类和结构之间差异的参考,请参阅What are the differences between struct and class in C++

答案 1 :(得分:0)

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

因此,当valuevalue时,有一个类引用另一个类public的定义,它适用于struct,但不适用于valueprivate,它是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时,它会尝试使用模板特化。但是,由于valueprivate的{​​{1}}成员(默认情况下类成员变量为Numberim<0>),因此会给编译器错误。