2014-09-15 5 views
2

선택적 값에 대한 빠른 솔루션을 구현해야합니다. 제 3 자 라이브러리에서 드래그하고 싶지 않습니다.std :: optional 클래스 구현

일반적으로 선택적 클래스는 어떻게 구현됩니까? 선택 객체는 'null-state'에있을 때 기본 객체를 여전히 기본 구성합니까?

+2

[Boost.Optional] (http://www.boost.org/doc/libs/1_56_0/libs/optional/doc/html/index.html) 구현을 살펴 보셨습니까? – Angew

+0

C++ 표준 라이브러리는 타사 라이브러리가 아닙니다. C++ 14를 아직 사용하고 싶지 않다고 생각하십니까? –

+0

@ E_net4 제 컴파일러가 아직 지원하지 않습니다. – NFRCR

답변

3

우선 Boost (특히 Boost.Optional)를 살펴 보길 강력히 권장합니다. Boost를 사용하는 것은 거의 표준적인 관행이며 바퀴 달린 것을 다시 만들지 않을 것입니다. 옵션 클래스는 일반적으로 어떻게 구현되는지

4

예를 https://github.com/akrzemi1/Optional에 대한

당신이 Boost.Optional을 사용하기를 꺼려 어떤 이유로, 유사 헤더 전용 라이브러리의 무리가 있다면?

일반적으로 값이 비어 있는지 여부를 나타내는 부울 플래그와 값을 저장하기위한 적절한 크기로 정렬 된 바이트 배열입니다.

'null-state'에있을 때 선택적 개체가 기본 개체를 여전히 기본 구성합니까?

아니오; 이는 저장된 유형에 대한 불필요한 요구 사항을 부과 할뿐만 아니라 잠재적 인 원치 않는 부작용을 유발합니다. 저장된 객체는 optional이 비어 있지 않을 때 placement-new로 만들어지며 비어있을 때 소멸자 호출로 파괴됩니다.

신속하고 지저분한 구현을 위해 Boost 또는 제안 된 표준 버전의 모든 유연성이 필요하지 않은 경우 단순히 기본 생성 개체를 저장할 수 있습니다.

제 3 자 라이브러리에서 드래그하고 싶지 않습니다.

나는 당신이 왜 그렇게 느껴지는지 다시 생각할 것입니다. Boost 구현은 헤더 전용이며, 잘 테스트되고, 도착할 경우 표준 버전으로 직접 교체 가능해야합니다. 나는 분명히 나 자신을 함께 수선 한 것 이상으로 그것을 믿을 것이다.