Проблема статического полиморфизма

Я нахожусь на микроконтроллере (что означает, что у меня может быть только статическое распределение памяти), и я пытаюсь работать с наследованием …..

Предположим, у меня есть абстрактный класс Image и абстрактный класс Font, Экземпляр Font может вернуть Image основанный на char дано в функции вроде так:

Font* mf;
Image* image = mf->GetImage("a");

Теперь реальная проблема в том, что я понятия не имею, что делать для GetImage Функция.

Проблема заключается в следующем: в c ++ для того, чтобы иметь член абстрактного класса, вы должны использовать его в качестве указателя. Так что моя дилемма в том, что у меня есть Font который хочет создать новый Image а затем верните его.

Если он возвращает указатель на его недавно созданный Image вы возвращаете ссылку на временный объект:

Image* FontImpl::GetImage(char c){
return &ImageImpl(c);  //This object is destroyed once this function exits
}

И затем, если я вернусь, я попытаюсь вернуть фактический тип, подобный этому:

Image FontImpl::GetImage(char c){
return ImageImpl(c);   //Cannot cast from ImageImpl to Image
}

Так есть ли идиома или что-то в этом роде для проблемы статической памяти?

-2

Решение

Использование динамического размещения было бы проще, но если это невозможно, вы должны хранить экземпляр где-то вне функции, например:

static ImageImpl image;

Image& FontImpl::GetImage(char c) {
image = ImageImpl(c);
return image;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]