我有一个简单的类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;
};
但是,这似乎不起作用(我不确定上面的朋友声明是否有任何影响).