访问ctor的私人班级

时间:2016-05-15 08:25:29

标签: c++ oop templates smart-pointers private-members

我有以下智能指针类的成员:

T *local_raw_ptr;
const memory_management_type local_type;

其中memory_management_type是枚举。 要对基类进行隐式强制转换,我想实现这个ctor:

template<
            typename T2,
            typename = typename std::enable_if<std::is_base_of<T, T2>::value>::type
    >
    pointer(const pointer<T2>& ptr):local_type(ptr.local_type), local_raw_ptr(ptr.local_raw_ptr) {};

但如果我尝试编译它,我会收到此错误:

pointer<Foo>::local_raw_ptr« is private within this context

为什么我无法在自己的构造函数中访问此类的私有成员?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

因为模板类的每个实例都是与其他实例不同的类。

因此,如果您有pointer<Foo>pointer<Bar>,则有两个不同的类,并且无法从pointer<Foo>访问pointer<Bar>个私有成员。

您正尝试从local_type构造函数访问pointer<T2> pointer<T>T2T的子类型这一事实无关紧要。