c – 朋友类的部分模板专业化?

c – 朋友类的部分模板专业化?,第1张

概述我有一个简单的类X,以及一组模板化的类Y< T,U>.我希望所有第一个模板化参数恰好是X的类Y成为X本身的朋友.以下希望传达我想要的,但友元声明给出了编译错误. template<typename T, typename U>class Y {};class X { public: X(int value) : i(value) {} const i 我有一个简单的类X,以及一组模板化的类Y< T,U>.我希望所有第一个模板化参数恰好是X的类Y成为X本身的朋友.以下希望传达我想要的,但友元声明给出了编译错误.

template<typename T,typename U>class Y {};class X {    public:        X(int value) : i(value) {}        const int& getI()    const { return i; }    private:        int    i;        template<class U> frIEnd class Y<X,U>;};

我不确定朋友声明的模板化是否允许(更不用说朋友声明的部分模板化).有没有办法做到这一点?或者我是否被逐一列出所有朋友?

谢谢,
马特

解决方法 对于问题的非部分部分,语法为:

class X {    template<class T,class U> frIEnd class Y;};

我想,在大多数情况下,这应该足够了.

使用C 11,您实际上可以成为模板化别名的朋友:

template<typename T,typename U>class Y { };class X {    public:        X(int value) : i(value) {}        const int& getI()    const { return i; }    private:        int    i;        template<class U> using YX = Y<X,U>;        template<class U> frIEnd class YX;};

但是,这似乎不起作用(我不确定上面的朋友声明是否有任何影响).

总结

以上是内存溢出为你收集整理的c – 朋友类的部分模板专业化?全部内容,希望文章能够帮你解决c – 朋友类的部分模板专业化?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存