2014-12-09 3 views
-5

C++에서는 boost :: optional을 double로 변환 할 수 있습니까?C++ convert boost :: optional <double>을 double으로 변환

I.E.

boost::optional<double> time; 
double realTime; 

realTime = time; 

마지막 행은 내게

"Assigning to 'double' from incompatible type boost::optional<double>" 
+3

문서로 시작하십시오. 다음 문서에 대한 문서입니다. http://www.boost.org/doc/libs/master/libs/optional/doc/html/boost_optional/quick_start.html –

+0

그래서, 무엇을 원하니? 'time'이'double'이 아닐 때 일어날까요? ('optional '은 어쩌면 두 번이고 아마 아무것도 아님). – Yakk

+0

@Yakk : 0은 어쩌면 아무것도없는 대체물 인 것 같습니다. –

답변

3

물론 그것이 오류를 제공하지만 time이 부여되어 있는지 확인해야합니다.

if (time){ 
    /*this means that the optional parameter was provided*/ 
    realTime = *time; 
} 

부스트는 임의의 값을 추출하는 연산자간접 참조를 사용하고, if (time) "제공 다움"의 충분한 테스트를하기 위해 좀 더 연산자 과부하 속임수를 사용한다. 당신이 optional이없는 경우에 time을 설정하려면 어떤 값을 알고있는 경우

+0

니스, 컴파일! 나는 시간이 존재했는지 확인했다. if (time)하지만 포인터가 컴파일된다는 것을 깨닫지 못했다. 이제 시험에! – user4275896

+1

그러나 설명서를 읽으십시오. 매우 포괄적이며 '선택 사항'이 어떻게 구현되는지 알려줍니다. – Bathsheba

+0

나는 하루 동안 문서와 웹을 읽었습니다. 물론 모든 것을 읽지는 않았으므로 독서를 계속할 것입니다. 나는 그 질문이 가능했는지 이해할 것을 요청했다. 감사! – user4275896

0

opt.get_value_or(3)opt의 값을 반환하고,이 값이없는 경우는 3를 반환합니다. 대부분의 기본값에 문제가있는 것처럼

이것은 위험하다 (0 적어도 다른 사람의 일이 아니기 때문에, 3NaN+inf-inf는 고려의 가치가있는 모든. 3 있습니다.)

당신이 알게되면 선택적 값이 .get()이거나 단 하나 operator*이 추출합니다. 부울 컨텍스트에서 optional<?>을 평가하면 비어 있는지 여부를 알 수 있습니다.