模板类层次结构朋友继承

时间:2015-05-15 01:48:08

标签: c++ templates protected

我正在修改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(){}
};

我的问题是:如何将ABC课程设置为朋友经理,而不管Manager的模板类型如何? (例如Manager包含模板ABCEABCDABCXYZEFGABC,...)

1 个答案:

答案 0 :(得分:3)

让他们成为朋友的任何经理:

class A {
    template <typename T>
    friend struct Manager;
};

template<class BASE>
class B: public BASE {
    template <typename T>
    friend struct Manager;
};

// etc.