クラステンプレートのテンプレート引数推論が入ったので false的なものを受け取ると例外を投げるクラスを書いてみた
C++17で [https://cpprefjp.github.io/lang/cpp17/type_deduction_for_class_templates.html:title=クラステンプレートのテンプレート引数推論が入ったので
コンストラクタでfalse的なものを受け取ると例外を投げるクラスを書いてみた
使用想定
テストなどで、注目度の低いエラー処理を雑に処理する
std::optional<Foo> make(int arg); Test(Foo_f_test_) { // makeは成功する前提で書いてる+makeは別のテストでしているので このテストでmakeのエラー処理はあまり書きたくない // 万が一makeが失敗した場合、noneを受け取ったFactのコンストラクタがこのテストを失敗させる Fact a = make(42); ASSERT_EQ(a->f(13) == false); // このテストの主要部 }
実装
template<class T> class Fact :public T{ public: Fact(T const&val):T(val) { if (! val) { throw std::runtime_error("hoge"); } } };