C++ 如何通过常量成员和继承避免代码重复和浪费内存?

C++ 如何通过常量成员和继承避免代码重复和浪费内存?,c++,inheritance,C++,Inheritance,我正在实现一些形状类。有没有一种方法可以同时避免代码重复和浪费内存 基本上,我希望基类中有一个常量变量,每个派生类只有一个副本(如静态成员),但每个派生类的值不同 例如,我想为派生类定义在惯性张量上工作的函数;对于每个形状,惯性张量是一个常数,所以我不希望每个实例都有一个相同常数的副本 但是,与声明相同的变量并为每个派生类定义相同的函数不同,我希望在基类中声明一个变量,并在基类中也有一个通用函数,比如将惯性张量从世界坐标更改为局部坐标,反之亦然 有没有办法做到这一点?在基类中使用纯虚函数,并在每

我正在实现一些形状类。有没有一种方法可以同时避免代码重复和浪费内存

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

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

但是,与声明相同的变量并为每个派生类定义相同的函数不同,我希望在基类中声明一个变量,并在基类中也有一个通用函数,比如将惯性张量从世界坐标更改为局部坐标,反之亦然


有没有办法做到这一点?

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

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; }
};
与你的要求无关,但与我认为你正在努力实现的目标有关;我将开始研究其他库如何实现刚体类型之间的集成的现有实现,如果只是想知道做什么的话


你能不能让函数以惯性张量为参数?然后,只需在每个派生类中创建静态变量。你可以用traits这样做,但我认为这不会为你节省太多代码。但是,你考虑过虚拟函数的价格吗?@XiaogeSu虚拟函数的价格是:每个类一个实现,vtable中一个额外的指针。因此,每个实例没有开销。当然,您需要为所需的查找和函数调用付出一点性能代价。@cmaster我知道这可能是个问题。当然,在编译期间,代码可以得到优化。我只想指出,这使得可以直接存储到汇编代码中的即时整数现在需要查找和调用。