Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何与由“定义的模板(别名)类建立朋友关系”;模板使用“?”;?_C++_Templates_Friend - Fatal编程技术网

C++ 如何与由“定义的模板(别名)类建立朋友关系”;模板使用“?”;?

C++ 如何与由“定义的模板(别名)类建立朋友关系”;模板使用“?”;?,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

Class
B
想与所有的
C和成为朋友,但他们比我的简单。
(我是C++新手)

B班想成为C班的朋友

不幸的是,这是不可能的,因为它不能引用部分专门化。而这个问题与使用
无关

友元声明不能引用部分专门化,但可以引用完全专门化

如果enum
EN
没有太多的枚举数,您可以使用完整规范作为解决方法。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>;
    ...
};