Сообщение ternary для разных подклассов на стеке от 21.12.2016 18:11
Изменено 21.12.2016 18:11 tdiff
Привет
Хочется в зависимости от условия создавать на стеке объекты разных подтипов одного общего класса, но пока не получается (ternary не умеет сам приводить к общему типу):
Ошибка:
<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 совпадало с текущим скоупом.
Как-то можно этого добиться? Не хочется писать
а создавать без повода объекты на хипе тоже как-то не круто.
Хочется в зависимости от условия создавать на стеке объекты разных подтипов одного общего класса, но пока не получается (ternary не умеет сам приводить к общему типу):
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();
а создавать без повода объекты на хипе тоже как-то не круто.
Привет
Хочется в зависимости от условия создавать на стеке объекты разных подтипов одного общего класса, но пока не получается:
Ошибка:
<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 совпадало с текущим скоупом.
Как-то можно этого добиться? Не хочется писать
а создавать без повода объекты на хипе тоже как-то не круто.
Хочется в зависимости от условия создавать на стеке объекты разных подтипов одного общего класса, но пока не получается:
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();
а создавать без повода объекты на хипе тоже как-то не круто.