所以我有一个头文件,如下所示:
class Crc16
{
public:
Crc16();
static long calculateCrc(const BYTE* ptr, long length);
long getCrc();
private:
long m_crc;
};
其中BYTE是unsigned char。该实现获取数据并返回该微粒数据的CRC。使用的多项式是固定的,即在静态函数内硬编码。但是,我想通过让某人定义自己的多项式并执行计算来扩展此实现。我想过创建一个新的构造函数,它接受新的多项式并将它赋给一个成员,但是不可能在静态函数中使用它。另一种可能性是创建一个非静态的新函数,它将多项式作为参数。但静态和非静态版本中的代码几乎完全相同。我不想改变我所拥有的静态功能的界面,因为它在很多地方使用。从架构的角度来看,最佳解决方案是什么?
答案 0 :(得分:1)
我会为多项式的函数添加另一个参数,并给它一个默认值。这使您不必更改任何要使用默认值的调用站点,但允许您在需要时为函数提供自己的多项式。
static long calculateCrc(const BYTE* ptr, long length);
变为
static long calculateCrc(const BYTE* ptr, long length, polynomial_type poly = some_default_value);
答案 1 :(得分:1)