私は を使用しboost::any
、そのような値を取得する関数をいくつか持っていますが、失敗する可能性があるため、実際には返されますstd::optional<boost::any>
(まあ、今のところは ですstd::experimental::optional
)。ここで、オプションを使用せずに、入力した値を を使用して取得しboost::any_cast(my_retrieved_any)
ます。オプションのケースを処理するために、次のように記述しました。
template<typename ValueType>
inline const optional<ValueType> boost_any_cast(const optional<boost::any>& operand)
{
return operand ? boost::any_cast(operand.value()) : nullopt;
}
しかし、これはコンパイルされません (Boost 1.58 および GCC 4.9.3 を使用)。私は得る:
/file.cpp(12): error: no instance of overloaded function "boost::any_cast"
matches the argument list
argument types are: (const boost::any)
これはどのように可能ですか?引数が ではないのはなぜboost::any&
ですか? 変数を operand.value() に設定してから、それを any_cast に渡してみましたが、どちらも役に立たなかったようです:
template<typename ValueType>
inline const optional<ValueType> boost_any_cast(const optional<boost::any>& operand)
{
if (operand) {
boost::any x(operand.value());
return boost::any_cast(x);
}
return nullopt;
}
これは私を得る:
/file.cpp(13): error: no instance of overloaded function "boost::any_cast"
matches the argument list
argument types are: (boost::any)
について、私が考慮していないことがあるはずですboost::any
...それは何ですか? そして、この「キャスト」操作を修正するにはどうすればよいですか?