stout的在异常捕获上遵循于谷歌类似的原则,不适用try...catch...,而是从函数返回值判断异常。Try类正是实现了这样的一个功能。
同Option一样,Try是一个模板类,每个类对象都有两种状态。
enum State { SOME, ERROR };
State state; T* t; std::string message;
SOME表示无异常,用户可获取指针t。ERROR表示有异常,用户可用过message获取异常信息。以下是Try类的示例:
#include "stout/try.hpp" int main() { auto a = Try<int>::some(100); auto b = Try<int>::error("hello"); std::cout << (a.isSome() ? "a is some" : "a is error") << std::endl; std::cout << (b.isSome() ? "b is some" : "b is error") << std::endl; std::cout << " b: " << b.error() << std::endl; // std::cout << " b: " << b.get() << std::endl; b = a; std::cout << " b: " << b.get() << std::endl; return 0; }