【问题标题】:How to avoid code repetition and wasting memory with const members and inheritance?如何避免代码重复和使用 const 成员和继承浪费内存?
【发布时间】:2013-08-31 20:07:26
【问题描述】:

我正在为形状实现一些类。有没有办法同时避免代码重复和浪费内存?

基本上,我希望基类中有一个变量,它是一个常量,每个派生类只有一个副本(如静态成员),但每个派生类的值不同。

例如,我想为派生类定义处理惯性张量的函数;对于每个形状,惯性张量都是一个常数,所以我不希望每个实例都拥有相同常数的副本。

但是,我不想为每个派生类声明相同的变量并定义相同的函数,而是想在基类中声明一个变量,并在基类中也有一个泛型函数,比如更改从世界到局部坐标的惯性张量,反之亦然。

有没有办法做到这一点?

【问题讨论】:

  • 不能让函数以惯性张量为参数吗?然后,您只需在每个派生类中创建静态变量。可以说你可以用特征来做到这一点,但我认为它不会为你节省很多代码。

标签: c++ inheritance


【解决方案1】:

在基类中使用纯虚函数并在每个派生类中重写它以返回适当的值。这样一来,您只有一个常量副本,并且每个派生类都正确定义了它。

class Base
{
public:
    virtual int get_constant0() const = 0;
};

class Derived0 : public Base
{
public:
    virtual int get_constant0() const { return 5; }
};

class Derived1 : public Base
{
public:
    virtual int get_constant0() const { return 42; }
};

【讨论】:

  • 但是,你考虑过虚拟功能的价格吗?
  • @XiaogeSu 虚函数的价格是这样的:每个类一个实现,在虚表中增加一个指针。所以每个实例没有开销。当然,您需要为所需的查找和函数调用付出一点性能。
  • @cmaster 我知道这可能是个问题。当然,在编译期间可以优化代码。我只想指出,这使得可以直接存储到汇编代码中的即时整数现在需要查找和调用。
【解决方案2】:

与您询问的内容无关,但与我认为您想要实现的目标有关;我会开始研究现有的实现其他库如何实现刚体类型之间的集成,如果只是想知道做什么。

ODE library

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多