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!