Каков наиболее подходящий способ вернуть базовый объект в преобразованный производный класс? - PullRequest
2 голосов
/ 17 мая 2011
struct B {};  // B contains data members
struct D : B {};  // D doesn't contain ANY data member

B g_b;  // global object
D& fun ()  // want to return by reference ONLY
{
  return <???>(g_b);  // how ???
}

[Примечание: я хочу избежать перегрузки конструктора (или присваивания), такого как D(const B&).]

Ответы [ 3 ]

5 голосов
/ 17 мая 2011

То, что вы пытаетесь сделать, незаконно. g_b не является D.

2 голосов
/ 17 мая 2011

Нет подходящего броска.Это на самом деле неопределенное поведение.

Подробнее см. В этом разделе: Понижение базового типа

Примечание. Термин Понижение при приведении базы к производному классу;и термин upcast используется при приведении производного к базовому классу.

1 голос
/ 17 мая 2011

Это неопределенное поведение.
Вы можете использовать dynamic_cast для выполнения безопасного приведения вниз указателя / ссылки базового класса на указатель / ссылку производного класса. В случае указателей возвращает ноль или исключение в случае ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...