Информация об изменениях

Сообщение ternary для разных подклассов на стеке от 21.12.2016 18:11

Изменено 21.12.2016 18:12 tdiff

Привет

Хочется в зависимости от условия создавать на стеке объекты разных подтипов одного общего класса, но пока не получается:
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 ? (base)d1() : d2();
base.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();

а создавать без повода объекты на хипе тоже как-то не круто.
Привет

Хочется в зависимости от условия создавать на стеке объекты разных подтипов одного общего класса, но пока не получается:
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();
base.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();

а создавать без повода объекты на хипе тоже как-то не круто.