在没有运行时多态性的情况下跨类共享函数

时间:2015-09-11 16:20:07

标签: c++ templates polymorphism

我有许多不同的矩阵类,它们代表矩阵可以使用的不同类型的存储。例如静态和动态数组,如下所示:

class mat_d
{
    float arr[3][4];
}
class mat_s
{
    float** arr;
}

所有矩阵类都使用operator()(uint32 r, uint32 c)访问运算符。显然,它们必须分别为每个班级实施。所有矩阵还具有可应用于它们的函数,例如返回新矩阵的transpose()。对于所有矩阵,此函数看起来完全相同,因为它使用所有矩阵具有共同点的operator()。如何在矩阵类中共享函数?

这是我不想做的事情:

  • 具有virtual .. operator()的所有矩阵的公共基类将在基本方法中使用,并被不同的存储矩阵覆盖。 (导致虚函数开销)
  • 包含所有基本方法的新矩阵类,其中包含表示所使用的存储策略的模板参数以及该类型的成员变量。 (只能通过基类的构造函数调用存储策略成员的构造函数;访问元素时的开销,因为访问操作符必须被调用两次)

我知道所有信息都在编译时出现,以便编译器知道在哪种情况下使用哪个矩阵类。我现在能想到的唯一解决方案是使用所有基本方法定义一个宏,然后在所有矩阵类中使用该宏,但那真的很难看。

0 个答案:

没有答案