在我的应用程序中,我有一个类型负责(可能)涉及大量的计算和一个用于处理器之间通信的类型。
typedef MyBigIntegerClass bigInt;
typedef int smallInt;
通信部分与 MyBigIntegerClass 不兼容,因此在通信例如 bigInts 向量之前,必须将其转换为 smallints。到目前为止,完全没有问题。
但是,对于大多数问题实例,没有必要使用 MyBigIntegerClass。事实上,即使int32_t
是足够的。这就是为什么我允许这样的配置
typedef int32_t bigInt;
typedef int16_t smallInt;
bigInt 类型对于计算内容仍然足够大。问题在于,smallInt 必须与 bigInt 不同。
class Problematic
{
public:
Problematic(bigInt);
Problematic(smallInt);
};
在此类中,构造函数或方法可以采用 bigInts 或 smallInts。如果它们相同,则编译失败。
由于代码的其他用户可能想要调整使用的类型,他们最终可能会得到一个配置,例如
typedef int32_t bigInt;
typedef int32_t smallInt;
并且编译以(至少对于某些开发人员)不明显的方式失败。
处理此问题的一种方法是static_assert(sizeof(bigInt) != sizeof(smallint), "bad config..")
,但我实际上喜欢拥有bigInt == smallInt
. 更改声明class Problematic
以允许类型等价的好方法是什么?