Я на микроконтроллером (что означает, что я могу иметь только статическое распределение памяти), и я пытаюсь работать с наследованием .....Статический полиморфизм Issue
Пусть у меня есть абстрактный класс 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
}
Итак, есть ли идиома или что-то для этой проблемы с статической памятью?
Что _static inheritance_ на самом деле? Вы имели в виду _static polymorphism_ в соответствии с [CRTP] (https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern)? –
@ πάνταῥεῖ Да, я имел в виду статический полиморфизм .... Я отредактирую сообщение соответственно – DarthRubik
Использование абстрактных базовых классов - это полиморфизм во время выполнения, а не статический полиморфизм. Вы занимаетесь статическим распределением памяти. Хотя, если это становится громоздким, вам, возможно, захочется изучить или загрузить небольшой пул пула памяти, так что сделайте динамическое выделение из статического буфера самостоятельно. –