2016-06-17 4 views
-4

나는 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 님과 관련해서 고려하지 않은 것 ... 무엇입니까? 어떻게이 "캐스팅"작업을 수정할 수 있습니까?

+0

@uhohsomebodyneedsapupper : 편집을 참조하십시오. – einpoklum

+0

'list'는 어떤 타입입니까? 'boost_any_cast()'를 호출하는 코드를 제공 할 수 있습니까? –

+0

@JanKorous : 코드에 어떤 목록도 없으며 함수의 "인수 목록"입니다. 그리고 boost_any cast()를 호출하는 코드는'auto x = boost_any_cast (function_returning_optional_boost_any())'입니다; – einpoklum

답변

3

boost::any_cast에는 템플릿 인수가 필요합니다.

template<typename T> T any_cast(const any &); 

코드 스 니펫에서 사용자가 필요합니다.

boost::any_cast<ValueType>(operand.value())