boost optional 예제

다양한 아이디어가 많이 있지만 모두 단점이 있습니다. 이제 부스트에 살펴 보자::선택! 예제 21.2에서 get_even_random_number(get_even_number)의 반환 값에는 새 형식인 boost::optional.boost:optional은 반환 값의 실제 유형으로 인스턴스화되어야 하는 템플릿입니다. 선택적 일반적인 사용 사례는 실패할 수 있는 함수의 반환 값입니다. std::pair와 같은 다른 접근 방식과 달리 선택적 개체는 구성 비용이 많이 드는 개체를 잘 처리하고 의도가 명시적으로 표현되기 때문에 더 읽기 쉽습니다. 클래스 템플릿 std::optional 은 선택적 포함된 값, 즉 존재하거나 존재하지 않을 수 있는 값을 관리합니다. Boost.Optional은 부스트::선택 옵션을 제공하므로 선택적 반환 값을 명확하게 표시할 수 있습니다. 이러한 래퍼는 여전히 값 유형입니다(복사를 통해 복사할 수 있음). 또한 std::optional은 사용 중 저장소에 메모리를 할당할 필요가 없습니다. 이제 다음 코드를 통해 Pool에서 마지막 개체를 얻을 수 있습니다. m_value는 선택 사항에서 액세스 -> 연산자.

옵션 반환하면 이 게시물의 시작 부분에서 고려되는 서투르고 부서지기 쉬운 상황을 피할 수 있습니다. 구체적인 그림으로, 벡터에서 요소를 찾기 위한 새로운 인터페이스를 작성해 봅시다: Boost.optional은 초기화할 수 있을 뿐만 아니라 초기화될 수 있는 값과 두 가지 상황이 모두 정상이며, int에 대한 포인터는 자연스럽게 “null”이므로 옵션으로 래핑하면 사용하기가 매우 어려워집니다. 선택적 참조가 없습니다. 참조 형식을 사용하여 선택적 을 인스턴스화하면 프로그램이 잘못 형성됩니다. 또는 T 형식의 std::reference_wrapper의 선택적 옵션을 사용하여 참조를 보유할 수 있습니다. 또한 태그 형식std::nullopt_t 또는 std::in_place_t를 사용하여 선택적 인스턴스화하는 경우 프로그램이 잘못 형성됩니다. 다음은 문자열 중 하나에서 분명히 실패할 int로 문자열을 변환하는 예입니다. 아마도 선택적 작업(만들기 제외)의 가장 중요한 작업은 포함된 값을 가져오는 방법입니다. 다음 기사에서는 오류 처리와 선택적 것이 최선의 선택이 아닌 이유를 설명하려고 합니다. 이 예제에서 -1은 난수를 생성할 수 없음을 의미합니다. 따라서 get_even_random_number()는 짝수 난수가 반환되도록 보장할 수 없습니다. 반환 값은 선택 사항입니다.

std::optional을 사용하면 포함된 개체를 거의 “일반적으로” 비교할 수 있지만, 난관이 nullopt인 경우 몇 가지 예외가 있습니다. 아래 참조: std:::optional std:::any, std::variant 및 std::string_view와 함께 C++ 어휘 유형의 일부입니다. Boost.Optional은 boost:make_optional() 및 부스트::get_optional_value_or(예 21.4 참조)와 같은 독립형 도우미 기능을 제공합니다. boost::make_optional()을 호출하여 boost:optional 형식의 개체를 만들 수 있습니다.