我正在修改C ++并面临以下问题:
假设:
class A {
int aVar;
public:
A(){}
virtual ~A(){};
};
template<class BASE>
class B: public BASE {
int bVar;
public:
B() : BASE() {}
virtual ~B() {}
};
template<class BASE>
class C: public BASE{
int cVar;
public:
C() : BASE() {}
virtual ~C() {}
}
D,E,F,G...
我可以做一种继承参数和函数等的分支类层次结构。与typedef C<B<A>> ABC;
然而,我应该上课,并且#34;管理&#34;这些对象的某些组合通过受保护的访问。
template<class TYPE>
struct Manager {
TYPE current;
Manager() {
current.aVar++;
current.bVar++;
current.cVar++;
}
~Manager(){}
};
我的问题是:如何将A
,B
和C
课程设置为朋友经理,而不管Manager
的模板类型如何? (例如Manager
包含模板ABC
,EABC
,DABC
,XYZEFGABC
,...)
答案 0 :(得分:3)
让他们成为朋友的任何经理:
class A {
template <typename T>
friend struct Manager;
};
template<class BASE>
class B: public BASE {
template <typename T>
friend struct Manager;
};
// etc.