c – 静态函数重载?

前端之家收集整理的这篇文章主要介绍了c – 静态函数重载?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我首先要说的是,我明白只有非静态成员函数可以是虚拟的,但这就是我想要的:

>定义接口的基类:所以我可以使用基类指针来访问函数.
>出于内存管理的目的(这是一个有限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.
}
原文链接:https://www.f2er.com/c/119559.html

猜你在找的C&C++相关文章