C++ 如何与由“定义的模板(别名)类建立朋友关系”;模板使用“?”;?
ClassC++ 如何与由“定义的模板(别名)类建立朋友关系”;模板使用“?”;?,c++,templates,friend,C++,Templates,Friend,ClassB想与所有的C和成为朋友,但他们比我的简单。 (我是C++新手) B班想成为C班的朋友 不幸的是,这是不可能的,因为它不能引用部分专门化。而这个问题与使用无关 友元声明不能引用部分专门化,但可以引用完全专门化 如果enumEN没有太多的枚举数,您可以使用完整规范作为解决方法。e、 g template<class T2> class B { template<EN T1> using CT = C<T1, T2>; friend CT
B
想与所有的C和成为朋友,但他们比我的简单。
(我是C++新手)
B班想成为C班的朋友
不幸的是,这是不可能的,因为它不能引用部分专门化。而这个问题与使用
无关
友元声明不能引用部分专门化,但可以引用完全专门化
如果enumEN
没有太多的枚举数,您可以使用完整规范作为解决方法。e、 g
template<class T2> class B {
template<EN T1> using CT = C<T1, T2>;
friend CT<EN1>; // same as friend C<EN1, T2>;
friend CT<EN2>; // same as friend C<EN2, T2>;
...
};
模板类B{
使用CT=C的模板;
friend CT;//与friend C相同;
friend CT;//与friend C相同;
...
};
与普通C(与CT对比)相同吗?i、 e.需要两个好友声明吗?@javaLover是的,是一样的。
template<EN T1> friend class C<T1,T2>;
template<EN TX> friend class CT;
template<typename TX> friend class CT;
template<class TX> friend class CT;
template<class TX> friend class CT<TX>;
template<typename> friend typename CT;
template<class T2> class B {
template<EN T1> using CT = C<T1, T2>;
friend CT<EN1>; // same as friend C<EN1, T2>;
friend CT<EN2>; // same as friend C<EN2, T2>;
...
};