В ролях ребенка

На самом деле я пытаюсь создатьmoneypunct кpunct_facet вэтот вопрос без написания конструктора копирования, как вэтот ответ.

Но в интересах написанияМинимальный, полный, проверяемый пример скажем, у меня есть эти два класса:

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 или жеChild с конструктором по умолчанию, но это не будет устанавливатьComplex members, Так скажи что мне даноParent foo который был построен с помощью пользовательского конструктора, и я хочу использоватьfoo возражать только сChild«sfunc метод. Как я могу это сделать? Прямо вверхdynamic_cast<Child*>(&foo) segfaults, поэтому не может быть путиhttp://ideone.com/JcAaxd

auto bar = dynamic_cast<Child*>(&foo);

Должен ли я сделатьChild конструктор, который принимаетParent а внутренне это копирует? Или есть какой-то способ разыгратьbar в существование?

РЕДАКТИРОВАТЬ:

Чтобы понять мою актуальную проблему,Parent из примераmoneypunct, который реализован в стандарте, поэтому я не могу изменить его.

class punct_facet мой аChild из примера, он наследуетmoneypunct и если я пытаюсь остаться независимым от реализации, я не могу даже использовать внутреннеmoneypunctпеременные-члены.

Это означает, что я должен отразить все данныеmoneypunct переменные-члены вpunct_facet и скопировать построить их наpunct_facet строительство. В результате получается объект, который в два раза жирнее, чем нужно, и требует от меня переопределения всехmoneypunct функциональность.

Понятно, что это нежелательно, но единственный способ, которым я могу найти это, состоит в том, чтобы взять ранее построенныйmoneypunct и относиться к нему какpunct_facet в соответствии с этим вопросом.

Ответы на вопрос(4)

Ваш ответ на вопрос