扩展包含静态函数的 class
Extending a class which contains a static function
所以我有一个头文件,如下所示:
class Crc16
{
public:
Crc16();
static long calculateCrc(const BYTE* ptr, long length);
long getCrc();
private:
long m_crc;
};
其中 BYTE 是一个无符号字符。此实现采用数据和 returns 该微粒数据的 CRC。使用的多项式是固定的,即在静态函数中硬编码。但是,我想通过让某人定义他自己的多项式并执行计算来扩展此实现。我想过创建一个新的构造函数,它采用新的多项式并将其分配给一个成员,但是不可能在静态函数中使用它。另一种可能性是创建一个非静态的新函数,它将多项式作为参数。但是静态和非静态版本中的代码几乎是相同的。我不想更改我拥有的静态函数的接口,因为它被用在很多地方。从建筑学的角度来看,最好的解决方案是什么?
我会为多项式的函数添加另一个参数并给它一个默认值。这使您不必更改任何要使用默认值的调用站点,但允许您在需要时为函数提供自己的多项式。
static long calculateCrc(const BYTE* ptr, long length);
变成
static long calculateCrc(const BYTE* ptr, long length, polynomial_type poly = some_default_value);
如果将多项式作为参数添加,为什么要将函数更改为非静态函数?
您可以同时实现它们:
static long calculateCrc(const BYTE* ptr, long length);
static long calculateCrc(const BYTE* ptr, const PolyType poly, long length);
所以我有一个头文件,如下所示:
class Crc16
{
public:
Crc16();
static long calculateCrc(const BYTE* ptr, long length);
long getCrc();
private:
long m_crc;
};
其中 BYTE 是一个无符号字符。此实现采用数据和 returns 该微粒数据的 CRC。使用的多项式是固定的,即在静态函数中硬编码。但是,我想通过让某人定义他自己的多项式并执行计算来扩展此实现。我想过创建一个新的构造函数,它采用新的多项式并将其分配给一个成员,但是不可能在静态函数中使用它。另一种可能性是创建一个非静态的新函数,它将多项式作为参数。但是静态和非静态版本中的代码几乎是相同的。我不想更改我拥有的静态函数的接口,因为它被用在很多地方。从建筑学的角度来看,最好的解决方案是什么?
我会为多项式的函数添加另一个参数并给它一个默认值。这使您不必更改任何要使用默认值的调用站点,但允许您在需要时为函数提供自己的多项式。
static long calculateCrc(const BYTE* ptr, long length);
变成
static long calculateCrc(const BYTE* ptr, long length, polynomial_type poly = some_default_value);
如果将多项式作为参数添加,为什么要将函数更改为非静态函数?
您可以同时实现它们:
static long calculateCrc(const BYTE* ptr, long length);
static long calculateCrc(const BYTE* ptr, const PolyType poly, long length);