我有以下智能指针类的成员:
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
为什么我无法在自己的构造函数中访问此类的私有成员?我该如何解决这个问题?
答案 0 :(得分:2)
因为模板类的每个实例都是与其他实例不同的类。
因此,如果您有pointer<Foo>
和pointer<Bar>
,则有两个不同的类,并且无法从pointer<Foo>
访问pointer<Bar>
个私有成员。
您正尝试从local_type
构造函数访问pointer<T2>
pointer<T>
。 T2
是T
的子类型这一事实无关紧要。