C ++"强制构造函数"无法访问私人会员

时间:2017-08-16 19:08:20

标签: c++ templates copy-constructor private-members coercion

我试图编写一些使用" Coercion by Member Template"的代码。模式,以便创建一个容器,可以保存指向多个类型的指针并以多态方式处理它们。

我试图写一个"强制构造函数的问题?" (我不确定你会真正称之为什么),但是我的代码无法编译声明我无法访问该类的私有成员。

常规复制构造函数工作正常并且具有访问权限,但由于某些原因,使用不同的模板类型会突然导致其失去访问权限。

#include <boost/shared_ptr.hpp>

template <typename T>
class Container {
public:
    Container<T>(T* contents) : m_contents(contents) {}

    // Copy constructor
    Container<T>(const Container<T>& other) : m_contents(other.m_contents) {}

    // Coercion constructor?
    template <typename U>
    Container<T>(const Container<U>& other) : m_contents(other.m_contents) {}

    T* get_contents() {
        return m_contents;
    }

private:
    T* m_contents;
};

// Things for the container to hold
struct A {};
struct B : public A {};

int main() {
    B* object1 = new B;
    Container<B> container1(object1);

    // Works fine
    Container<B> container2(container1);

    // Fails to compile because m_contents is private....
    Container<A> container3(container1);
}

如何在&#34;强制构造函数&#34;中访问成员变量?没有公开?公开它会打破封装并破坏容器的整个目的。

还添加&#34; get_contents()&#34;方法并在&#34;强制构造函数中使用它&#34;不是一个选项,因为我不希望从外面访问内容。

0 个答案:

没有答案