関数の戻り値用テンプレート

C++で、任意の型に成否とエラー番号とエラーメッセージ(へのポインタ) を付加するだけのテンプレート。
関数の戻り値用に。

template <class Type>
class Result
{
public:
    Type    value;
    bool    success;
    int     errorNo;
    const char* errorMessage;

    Result<Type>() : value(Type()), success(true), errorNo(0), errorMessage(NULL) {}

    operator Type() const {
        return this->value;
    }

    Result<Type>& operator=(Type x) {
        this->value = x;
        return *this;
    }
};

使い方はこう。

Result<int> div(int a, int b)
{
    Result<int> x;

    if (b == 0) {
        x.success = false;
        x.errorNo = 1;
        x.errorMessage = "divide by zero!";
        return x;
    }
    x = a / b;
    return x;
}

int main(void)
{
    for (int i = 4; i >= 0; i--)
    {
        Result<int> x = div(100, i);
        int y = x * i;
        if (x.success) {
            printf("x = %d, y = %d\n", (int)x, y);
        } else {
            printf("Error %d: %s", x.errorNo, x.errorMessage);
        }
    }
    return 0;
}

【実行結果】

x = 25, y = 100
x = 33, y = 99
x = 50, y = 100
x = 100, y = 100
Error 1: divide by zero!