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

Difference between struct and class when Template meta-programming

本文关键字:之间 区别 结构体 编程      更新时间:2023-10-16
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++编译,它抱怨...但是,据我所知,结构体和类的处理方式几乎相同,就像这样"在C++中,结构体和类之间的唯一区别是结构体成员默认是公共的,类成员默认是私有的。

那么,它们在地球上有什么区别呢?

差异将与典型的类与结构相同。您的"值"对于第一个示例(使用结构(将是公共的,对于第二个示例(使用类(将是私有的。

有关类和结构

之间区别的参考,请参阅C++中的结构体和类之间的区别。

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

因此,当valuepublic时,让一个类引用另一个类对value工作的定义,这是针对struct的,但当valueprivate时,它适用于class

您可以使用friend机制,也可以公开value,或者更简单地说,执行以下操作:

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

当它尝试使用模板专用化n=1编译Numberim<n-1>::value时,区别仍然相同。但是,由于valueNumberim<0>的成员private(因为默认情况下private类成员变量(,因此会给出编译器错误。