是否可以声明一个带有其他模板参数的自定义类模板为友元?
template<class T, class... Ts>
class A {
template<class U> friend class A<U, Ts...>; //compile error - C3772 'A<U>': invalid friend template declaration
};
template<class T, class... Ts>
class A {
template<class U, class... Us> friend class A; //here you go
};
A
之后指定模板参数。类模板的部分特化不能被声明为友元。只有一个(完全)特化或整个类模板可以。如果您确实需要成为所有U
特化的朋友,您需要成为整个模板的朋友:
template<class U, class... Us> friend class A;