xml*_*lmx 4 c++ standards templates 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>'
}
};
Run Code Online (Sandbox Code Playgroud)
为什么模板类型不能成为C++中的友元类?
son*_*yao 13
通过使用关键字class,您可以向前声明一个名为的新类型T; 其中没有引用模板参数T.(它T实际上会影响模板参数.)
只需删除关键字class,然后友元声明将不转发声明新类型.
template<typename T>
class A
{
friend T;
int n;
};
Run Code Online (Sandbox Code Playgroud)
这个用法(friend simple-type-specifier ; friend typename-specifier ;)是从C++ 11开始引入的.