我首先要说的是,我明白只有非静态成员函数可以是虚拟的,但这就是我想要的:
>定义接口的基类:所以我可以使用基类指针来访问函数.
>出于内存管理的目的(这是一个有限ram的嵌入式系统),我希望静态分配重写函数.我接受这样的结果:使用静态函数,我将如何操作函数中的数据.
我目前的想法是,我可以通过使其成为实际静态的函数的包装来保持轻量级重载函数.
请不要告诉我,我需要重新思考我的设计.这就是我提出这个问题的原因.如果你想告诉我我最好使用c并使用回调,请指导我阅读一些阅读材料来解释使用面向对象方法的缺陷.是否有面向对象的设计模式满足我列举的要求?
解决方法
Is there a object oriented pattern of design which meets the requirements I have enumerated?
是的,简单的旧虚函数.你的愿望是“静态分配的最重要的功能”.虚拟功能是静态分配的.也就是说,实现这些函数的代码只存在一次,并且只在编译/链接时固定.根据您的链接器命令,它们可能与任何其他功能一样存储在闪存中.
class I { public: virtual void doit() = 0; virtual void undoit() = 0; }; class A : public I { public: virtual void doit () { // The code for this function is created statically and stored in the code segment std::cout << "hello,"; } virtual void undoit () { // ditto for this one std::cout << "HELLO,"; } }; class B : public I { public: int i; virtual void doit() { // ditto for this one std::cout << "world\n"; } virtual void undoit() { // yes,you got it. std::cout << "WORLD\n"; } }; int main () { B b; // So,what is stored inside b? // There are sizeof(int) bytes for "i",// There are probably sizeof(void*) bytes for the vtable pointer. // Note that the vtable pointer doesn't change size,regardless of how // many virtual methods there are. // sizeof(b) is probably 8 bytes or so. }