假设我正在编写一个 API,我的一个函数采用一个表示通道的参数,并且只会介于 0 和 15 之间。我可以这样写:
void Func(unsigned char channel)
{
if(channel < 0 || channel > 15)
{ // throw some exception }
// do something
}
或者我是否利用 C++ 作为一种强类型语言,让自己成为一种类型:
class CChannel
{
public:
CChannel(unsigned char value) : m_Value(value)
{
if(channel < 0 || channel > 15)
{ // throw some exception }
}
operator unsigned char() { return m_Value; }
private:
unsigned char m_Value;
}
我的功能现在变成了这样:
void Func(const CChannel &channel)
{
// No input checking required
// do something
}
但这完全是矫枉过正吗?我喜欢自我记录和保证它是它所说的那样,但是值得为这样一个对象的构造和销毁付出代价,更不用说所有额外的打字了吗?请让我知道您的意见和替代方案。