我实际上想做的是投射一个构造的moneypunct
to the punct_facet
in 这个问题无需编写复制构造函数,如下所示这个答案.
但为了写一个最小、完整、可验证的示例假设我有这两个课程:
class Parent{
public:
Parent(Complex& args);
Parent operator=(const Parent&) = delete;
Parent(const Parent&) = delete;
Parent() = default;
virtual void func();
private:
Complex members;
};
class Child : public Parent{
public:
virtual void func();
};
我可以构建一个Parent
or Child
使用默认构造函数,但不会设置Complex members
。所以说我被给予Parent foo
它是使用自定义构造函数构建的,我想使用foo
对象只是Child
's func
方法。我怎么做?直上来的dynamic_cast<Child*>(&foo)
段错误,所以可能没有办法:http://ideone.com/JcAaxd
auto bar = dynamic_cast<Child*>(&foo);
我必须做一个Child
构造函数需要一个Parent
并在内部复制它?或者有什么方法可以投射bar
存在?
EDIT:
为了深入了解我的实际问题,Parent
从这个例子是moneypunct
,这是在标准中实现的,所以我无法修改它。
class punct_facet
是我的,并且Child
从示例来看,它继承了moneypunct
如果我试图保持实现独立,我什至不能在内部使用moneypunct
的成员变量。
这意味着我必须数据镜像所有moneypunct
中的成员变量punct_facet
并复制构造它们punct_facet
建造。这会导致对象的大小是所需大小的两倍,并且需要我重新实现所有内容moneypunct
功能。
显然这是不可取的,但我能找到的唯一方法是采用先前构建的moneypunct
并将其视为punct_facet
按照这个问题的要求。