Open/Close Menu Yapı Taahhüt ve İnş. Tic. Ltd. Şti.

Size Özel Tekliflerimiz?
İletişime Geçin! »

Bizi Arayın:
0216 537 19 46/47

더 흥미로운 것은 std::variant이 여분의 공간을 할당하지 않는다는 것입니다! 변종을 보유하는 동적 할당이 발생하지 않습니다. 그리고 차별. 분명히 다른 접근 방식이 필요합니다. 일반적인 솔루션은 공통 기본 유형(종종 가상 기본 클래스 [Hen01] 또는 더 위험하게는 보이드*)을 통해 조작되는 개체의 동적 할당을 특징으로 합니다. 그런 다음 다형성 다운캐스트 구조(예: dynamic_cast, boost::any_cast 등)를 통해 콘크리트 유형의 객체를 검색할 수 있습니다. 초기 방문 비용이 필요한 비용을 초과할 수 있지만 이점은 빠르게 중요해집니다. 이 섹션을 마무리하기 전에, 우리는 apply_visitor와 방문의 마지막 이점을 탐구해야한다: 지연 방문. 즉, 특정 방문자를 변형에 즉시 적용하지 않고 지정된 변형에서 작동하는 함수 개체를 반환하는 특수 형식의 apply_visitor를 사용할 수 있습니다. 이 동작은 다음에 보여 주듯이 변형 형식의 시퀀스에서 작업할 때 특히 유용합니다. 예를 들어 v = “Hello World”다음 변형의 현재 상태를 알고 있습니까? 그 std::문자열인가요? boost::apply_visitor()에 전달된 두 번째 매개 변수는 boost::variant 변수입니다. 재귀 변형 형식의 일부 응용 프로그램의 경우 사용자는 다음과 같은 편리한 구문을 위해 변형을 사용하여 재귀_래퍼를 사용하는 모든 유연성을 희생 할 수 있습니다: 코드는 std::variant, std::monostate 및 std::방문하지만 이것은 새로운 기능입니다, C ++14로 제한하고 부스트에서만 사용할 수 1.58.

그러나 또한 정상적인 기능은 부스트를 통해 방문자로 사용할 수 있습니다::visitor_ptr. (참고: std::forward는 “전달 참조”인 변형 및 방문자를 완벽하게 전달하기 위해 사용되어야 합니다.) 때로는 계산을 통해 방정식의 실제 뿌리와 같은 몇 가지 옵션이 제공 될 수 있습니다. 변형으로, 우리는 가능한 모든 옵션을 래핑하고 우리가 찾을 수있는 얼마나 많은 뿌리를 명확하게 표현 할 수 있습니다. C ++17의 이 새로운 std:::variant 유형이 어떻게 작동하고 어디에서 유용할지 살펴보겠습니다. Weight_allowance는 변형에 관련된 정확한 유형에 대해 (그리고 알아야 할) 것을 익법적으로 알고 있습니다. 이것은 동등한 스위치 문보다 확실히 낫지만 (주로 모든 변형 유형이 처리되는 정적 확인으로 인해) 블록을 사용하는 특정 시스템에서 사용 편의성 이외의 이점을 제공하지 않는 것 같습니다. 변형에서. 그러나 변형 내부의 값에 액세스하는 가장 중요한 방법은 방문자를 사용하는 것입니다. 즉, 변형 내에 저장하는 실제 형식을 사용하여 숨겨진 전환과 원치 않는 변환이 호출되지 않도록 합니다. 내 경험에서 나는 가능한 모든 유형을 알고 있는 경우 std::variant을 사용하여 설계를 개선할 수 있도록 보이드*도 이러한 알 수 없는 형식을 보유하는 데 사용된 예제를 보았습니다. boost::apply_visitor()는 컴파일 시 코드 정확성을 보장하기 때문에 boost::get()보다 선호되어야 합니다.

의도된 것이지만 변형 형식 식이 인스턴스화될 때 binary_op이 여전히 불완전하기 때문에 위의 방법은 컴파일되지 않습니다. 또한 이 접근 방식은 C++ 구문이 다르더라도 위의 예제가 “작업”으로 만들어질 수 있더라도 표현식은 무한한 크기여야 하므로 불가능합니다. 방문자는 “모든 변형에서 가능한 모든 대안을 받아 들일 호출 “입니다.