【发布时间】:2016-05-12 01:21:20
【问题描述】:
我在一个微控制器上(这意味着我只能分配静态内存)并且我正在尝试使用继承.....
假设我有一个抽象类Image 和一个抽象类Font。 Font 的实例可以根据函数中给出的char 返回Image,如下所示:
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
}
那么这种静态内存问题有成语之类的吗?
【问题讨论】:
-
什么是静态继承?您是指CRTP 提供的静态多态性?
-
@πάνταῥεῖ 是的,我的意思是静态多态性......我将相应地编辑帖子
-
使用抽象基类是运行时多态而不是静态多态。你正在做静态内存分配。虽然如果这变得笨拙,您可能想探索编写或下载一个小型内存池类,所以自己从静态缓冲区进行一些动态分配。
标签: c++ pointers inheritance static-memory-allocation