[英]partial template specialization for friend classes?
我有一个简单的 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;
};
但是,这似乎不起作用(我不确定上面的朋友声明是否有任何效果)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.