为什么模板类型不能成为 C++ 中的友元 class?
Why can't a template type be a friend class in C++?
template<typename T>
class A
{
friend class T;
int n;
};
struct B
{
B()
{
A<B>{}.n;
// error : 'n' is a private member of 'A<B>'
}
};
为什么模板类型不能成为 C++ 中的友元 class?
使用关键字 class
,您将向前声明一个名为 T
的新类型;它不引用模板参数 T
。 (它实际上隐藏了模板参数 T
。)
只需删除关键字class
,则友元声明不会转发声明新类型。
template<typename T>
class A
{
friend T;
int n;
};
This usage (friend
简单类型说明符; friend
类型名称说明符 ;) 自 C++11 起引入。
template<typename T>
class A
{
friend class T;
int n;
};
struct B
{
B()
{
A<B>{}.n;
// error : 'n' is a private member of 'A<B>'
}
};
为什么模板类型不能成为 C++ 中的友元 class?
使用关键字 class
,您将向前声明一个名为 T
的新类型;它不引用模板参数 T
。 (它实际上隐藏了模板参数 T
。)
只需删除关键字class
,则友元声明不会转发声明新类型。
template<typename T>
class A
{
friend T;
int n;
};
This usage (friend
简单类型说明符; friend
类型名称说明符 ;) 自 C++11 起引入。