T
をstd::any
に入れると、any_cast<T>(my_any)
で取得できます。しかし、現時点での投票段階での標準(= C++ 17)には、nullopt
とstd::any_cast<T>(oa.value())
がある場合、nullopt
を返すような関数が含まれていますか?そういう行に沿った何か?std :: anyとstd :: optionalのany_cast
編集:人々は実装を示唆しているように見えるので、私はまた、私は今のところ使用するものリストアップします:
/* using magic here to select between boost/std::experimental/std versions */
template<typename T>
inline const optional<T> any_cast(const optional<any>& operand)
{
return operand ?
optional<T>(any_cast<T>(operand.value())) :
optional<T>(nullopt);
}
私はあなたの提案が好きですが、本当に3つのテンプレート引数が必要ですか? – einpoklum
正確性と柔軟性を望むなら、yes: 'any_cast'に' T'が使われます。 'TOptional'はオプションの値を完全に転送するために使われます。 'TF'は一般的な呼び出し可能なオブジェクトのために使われます。 'TOptional'を使わなくても実装できますが、' o'がr値として渡されたときに '* o'を正しく動かすためには、コードの繰り返しが必要です。 –
しかし私はfを持っていません。あなたは、キャストとその結果の使用を組み合わせるように強制しています。キャストとは異なります。 – einpoklum