2017-05-18 21 views
6

私は関数は、テーブルから取得した値を返す必要があります状況があります。このテーブルのセル(テーブルが正常に動作していると仮定しましょう...)に値が含まれているか、そうでない可能性があります。この値は、int, double, string, date(ただし、他の型はありません)のうちの1つでもかまいません。戻り型のstd ::オプションの<はstd ::バリアント<...>>

、このような機能は何を返すのでしょうか? std::optional<std::variant<std::string, int, double, std::chrono::time_point>>を返すことをお勧めしますか?

はそれがoptionalvariantの良い使用でしょうか?

+0

optional + variantのようなサウンドでこの要件を解決できます。 – Kobi

答えて

11

私は、これはstd::monostateの便利な使用であると考えるでしょう。具体的には、variant<std::monostate, int, double, std::string, std::chrono::time_point>monostateは、variantに値が含まれていない場合に便利です。

むしろoptional<variant>よりも実際の型を使用してのいいところは、面会がそれに正常に動作することです。 monostateパラメータを取ることができるファンクタを書くことができます。したがって、空のバリアントにもvisitを使用できます。

+1

"std :: variant。[...]で正常に動作する空の代替として使用するためのユニットタイプ。右の音。 http://en.cppreference.com/w/cpp/utility/variant/monostate – user2296177

関連する問題