나는 boost::any
을 사용하고 이러한 값을 검색하지만 실패 할 수 있으므로 실제로는 std::optional<boost::any>
(글쎄, 지금은 std::experimental::optional
)을 반환합니다. 이제 옵션이 없으면 boost::any_cast(my_retrieved_any)
을 사용하여 입력 한 값을 다시 얻습니다. 선택 사양 인 경우를 처리하기 위해, 나는 다음과 같은 서면으로 작성했습니다 :boost :: any_cast 및 std :: optional의
template<typename ValueType>
inline const optional<ValueType> boost_any_cast(const optional<boost::any>& operand)
{
return operand ? boost::any_cast(operand.value()) : nullopt;
}
를하지만이 (부스트 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&
이 아닌 이유는 무엇입니까? 나는 다음 any_cast에 있음을 전달) (operand.value하기 위해 변수를 설정 시도 -하지만 도움이 보이지 않았다 중 하나
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
님과 관련해서 고려하지 않은 것 ... 무엇입니까? 어떻게이 "캐스팅"작업을 수정할 수 있습니까?
@uhohsomebodyneedsapupper : 편집을 참조하십시오. – einpoklum
'list'는 어떤 타입입니까? 'boost_any_cast()'를 호출하는 코드를 제공 할 수 있습니까? –
@JanKorous : 코드에 어떤 목록도 없으며 함수의 "인수 목록"입니다. 그리고 boost_any cast()를 호출하는 코드는'auto x = boost_any_cast (function_returning_optional_boost_any())'입니다; –
einpoklum