ternary для разных подклассов на стеке
От: tdiff  
Дата: 21.12.16 18:11
Оценка:
Привет

Хочется в зависимости от условия создавать на стеке объекты разных подтипов одного общего класса, но пока не получается:
class base { virtual void f() const = 0;};
class d1 : public base { void f() const override {...} };
class d2 : public base { void f() const override {...} };

const base& obj = true ? (const base&)d1() : d2();
obj.f();

Ошибка:
<source>:7:25: error: allocating an object of abstract class type 'const base'
const base& obj = true ? (const base&)d1() : d2();

Другими словами, я хочу, чтобы стек выглядел вот так:
[ссылка на объект ниже]
[d1 или d2]
и время жизни d1 или d2 совпадало с текущим скоупом.

Как-то можно этого добиться? Не хочется писать
if true
  d1().f();
else
  d2().f();

а создавать без повода объекты на хипе тоже как-то не круто.
Отредактировано 21.12.2016 18:13 tdiff . Предыдущая версия . Еще …
Отредактировано 21.12.2016 18:12 tdiff . Предыдущая версия .
Отредактировано 21.12.2016 18:11 tdiff . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.