Wie weit ist es mit einer stark typisierten Sprache?

Nehmen wir an, ich schreibe eine API, und eine meiner Funktionen verwendet einen Parameter, der einen Kanal darstellt, und wird immer nur zwischen den Werten 0 und 15 liegen. Ich könnte es so schreiben:

void Func(unsigned char channel)
{
    if(channel < 0 || channel > 15)
    { // throw some exception }
    // do something
}

Oder nutze ich C ++ als stark typisierte Sprache und mache mich selbst zu einem Typ:

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;
}

Meine Funktion wird jetzt zu:

void Func(const CChannel &channel)
{
    // No input checking required
    // do something
}

Aber ist das total übertrieben? Ich mag die Selbstdokumentation und die Garantie, dass es das ist, was es verspricht, aber lohnt es sich, den Bau und die Zerstörung eines solchen Objekts zu bezahlen, geschweige denn die zusätzliche Eingabe? Bitte teilen Sie mir Ihre Kommentare und Alternativen mit.

Antworten auf die Frage(28)

Ihre Antwort auf die Frage