В ролях ребенка
На самом деле я пытаюсь создать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
в соответствии с этим вопросом.