2015-05-15 147 views
1

我与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;

但是,我应该有类,以及通过受保护的访问“管理”这些对象的某些组合。

template<class TYPE> 
struct Manager { 
    TYPE current; 

    Manager() { 
     current.aVar++; 
     current.bVar++; 
     current.cVar++;  
    } 
    ~Manager(){} 
}; 

我的问题是:如何建立ABC班朋友经理无论Manager的模板类型的? (如Manager与模板ABCEABCDABCXYZEFGABC ...)

回答

3

只要有他们的朋友任何经理:

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

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

// etc. 
+0

[现场演示](http://coliru.stacked-crooked.com/a/e8a64d9c057b1d5e)(带有修复程序) – dyp

+0

@dyp是否有比修改'class'到'struct'更多的修复? – Barry

+0

在OP的代码中,ctors是私有的,并使用详细的类型说明符。 (dtors也是私有的) – dyp