gpt4 book ai didi

c++ - 如何与 "template using"定义的模板(别名)类成为 friend ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:02 27 4
gpt4 key购买 nike

B<certain X>想和每个人成为 friend C<any,certain X> .
我正在努力寻找解决方法。

只要我不添加有问题的行,下面是成功编译的完整代码。

#include <string>
using namespace std;

enum EN{ EN1,EN2 };
template<EN T1,class T2> class C{
public: C(){
std::cout<<T1<<std::endl;
}
};
template<class T2> class B{
template<EN T1> using CT = C<T1,T2>;
//template<EN TX> friend class CT; //<-- error if insert this line
public: static void test(){
CT<EN1> ct;
}
};

int main() {
B<int>::test();
return 0;
}

这是我尝试过的(全部失败):-

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;

问题要插入的正确语句(1 行)是什么?
如果可能的话,我希望 friend 语句使用 CT而不是 C .

我已阅读 a similar questionthis ,但它们比我的简单。
(我是 C++ 新手。)

最佳答案

Class B wants to be a friend with every C.

不幸的是这是不可能的,因为template friend不能引用部分特化。而且这个问题与using无关。

Friend declarations cannot refer to partial specializations, but can refer to full specializations

如果枚举 EN 没有太多枚举器,您可以使用完整的规范作为解决方法。例如

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>;
...
};

关于c++ - 如何与 "template using"定义的模板(别名)类成为 friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42241235/

27 4 0