假设您开始对项目进行编码,并且某些类型是整数,即您的代码可能看起来像这样:
typedef int NumericType;
NumericType a = 0;
NumericType b = 100;
将CountingType更改为特殊类,出于安全原因,该类没有从整数隐式转换。现在,您必须遍历所有代码并更新使用常量的位置。我已经开始遍历代码,将其更改为:
typedef specialType NumericType;
NumericType a = static_cast<NumericType>(0);
NumericType b = static_cast<NumericType>(100);
这样,如果将来再次更改NumericType,则需要更改的代码将更少。我开始怀疑这是否是我通常应该遵循的规则之一,因为我应该始终使用static_cast常量。
在C ++中使用格式字符串的任何时候,我就开始这样做,这样,如果我更改类型,我就有机会收到有关sprintf_s调用的警告。即
sprintf_s(buffer, 10, "Bob %d", static_cast<int>(bob));
还有另一种用于处理常量和键入内容的模式吗?
答案 0 :(得分:1)
我与小组中的其他开发人员进行了交流,我喜欢的另一个解决方案是使用如下代码:
typedef int NumericType;
NumericType a = NumericType(0);
NumericType b = NumericType(100);
这样做的好处是,如果我为NumericType切换类型,则只需确保可以使用int构造它,这与允许将其转换为int有所不同。也就是说,只要specialType
的构造函数采用int
或long
,那么此代码仅在typedef更新时有效。
typedef specialType NumericType;
NumericType a = NumericType(0);
NumericType b = NumericType(100);