模板元编程时结构体和类之间的区别
Difference between struct and class when Template meta-programming
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>
无关。
因此,当value
是public
时,让一个类引用另一个类对value
工作的定义,这是针对struct
的,但当value
是private
时,它适用于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
时,区别仍然相同。但是,由于value
是Numberim<0>
的成员private
(因为默认情况下private
类成员变量(,因此会给出编译器错误。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?