От: | Marty | https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg | |
Дата: | 01.10.18 17:33 | ||
Оценка: |
class Error
{
public:
typedef unsigned error_code_type;
error_code_type error_code;
Error() : error_code(ok) {}
Error( const Error &e) : error_code(e.error_code) {}
explicit Error( error_code_type e ) : error_code(e) {}
// bool isSuccess();
// bool isFail();
//...
};
template <typename ResultType>
class Result : public Error
{
ResultType value;
Result( const ResultType &r ) : value(r) {}
Result(Error e) : Error(e) {} //!!!
// bool isSuccess();
// bool isFail();
//...
};
// Использование
Result<SomethingType> doSomething()
{
if (doSomethingAnother())
return SomethingType(/* with some args */);
return Error(fail);
}
int main()
{
auto res = doSomething();
if (res.isSuccess())
std::cout<<"Result: "<<res.value.asString()<<"\n";
else
std::cout<<"doSomething failed\n";
return 0;
}