Рассмотрим следующий пример, в котором нарезка объекта происходит во время разыменования базового указателя.
#include <stdio.h>
class Base {
public:
virtual void hello() {
printf("hello world from base\n");
}
};
class Derived : public Base{
public:
virtual void hello() {
printf("hello world from derived\n");
}
};
int main(){
Base * ptrToDerived = new Derived;
auto d = *ptrToDerived;
d.hello();
}
Я хочу, чтобы переменная d
содержала объект типа Derived
вместо объекта типа Base
, без динамического выделения памяти и без явного приведения.
Я уже просмотрел этот вопрос, но решение, предложенное в ответе, требует динамического выделения памяти, поскольку оно возвращает указатель на новый объект вместо значения нового объекта.
Возможно ли это в C++11?
boost::variant
. Если бы вы могли ограничить максимально возможный размер объекта разумным значением, вы могли бы создать класс, похожий на умный указатель, для управления им. - person milleniumbug   schedule 18.05.2016