API を作成していて、関数の 1 つがチャネルを表すパラメーターを取り、値が 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
}
しかし、これは完全にやり過ぎですか?私はセルフドキュメンテーションと、それが言うとおりであることを保証するのが好きですが、追加のタイピングはもちろんのこと、そのようなオブジェクトの構築と破壊にお金を払う価値はありますか? あなたのコメントと代替案を教えてください。