Это кажется глупым вопросом, но я хочу иметь возможность создать экземпляр производного класса и назначить его базовому классу в одну строку:
class A { };
class B : public A { };
// i can do this
A *base;
B derived;
base = &derived;
// i'd like to do something like this
A *base;
base = &B(); // produces a warning: taking address of temporary
Я пытаюсь получить полиморфное поведение без использования оператора new. Я думаю, что компилятор вставляет временную ссылку на возвращаемое значение конструктора. Можно ли указать компилятору, что я действительно хочу использовать этот адрес для назначения?
* РЕДАКТИРОВАТЬ
Вот небольшой контекст. У меня что-то вроде этого при разборе XML-файла:
class element { virtual void load_xml(...); };
class city : public element { ... };
class state : public element { ... };
element *base;
// read some xml
if (xml_node == "city") {
base = &city();
} else if (xml_node == "state") {
base = &state();
}
base.load_xml(...);
Идея состоит в том, что каждый производный узел знает, как себя увлажнить, и для этого переопределит функцию load_xml (). Я предполагаю, что мне действительно следует вызывать load_xml в каждом блоке if, а не пытаться присвоить каждому производному классу базу, а затем вызвать load_xml из базы в конце.
Спасибо!