如果我有一个采用可变参数包模板参数的类,我怎么能声明它们都是朋友?
以下是我想用伪代码形式做的事情:
template<typename... Ts>
class AbstractMyClass {
int privateInt;
friend Ts...;
};
class OtherClass;
using MyClass = AbstractMyClass<OtherClass>;
class OtherClass {
public:
void foo(MyClass &c){
c.privateInt = 42;
}
};
答案 0 :(得分:0)
这只能使用“编译时间递归”来完成,就像元组一样。要点是(我现在在一台小型笔记本电脑上,无法轻松打字):
template<class .... THINGS> class object;
template<class T> class object {
friend T;
};
template<class T,class ... THINGS>
class object: public object<THINGS> {
friend T;
};
如果C ++不喜欢这样,请尝试template<> class object<> {};
作为结束递归的那个(我在1模板参数中用object
终止它)
(感谢Dietmar Kuhl的格式化)