2012-01-15 2 views
20

내 프로그램을 boost 사용없이 작동 시키려고하는데 유용한 패턴의 대안을 찾을 수 없습니다. 즉, 표준 라이브러리에 boost::optional -likewise 패턴을 찾을 수 없습니다. boost::optional (C++ 11 또는 다른 곳)에 대한 몇 가지 표준 대안이 있습니까?C++ 표준 라이브러리의 boost :: optional 대안

+0

C++ 0x == C++ 11, 질문에서 제외되었습니다. :) – Xeo

+1

'boost :: optional'에 비해 저렴하고 안전하지 않은 nullable 포인터를 사용할 수 있습니다. 또는 아마도'std :: unique_ptr', 여기서 값 0 (null_ptr, NULL)은 초기화되지 않은 선택적 타입으로 해석됩니다. 단점 외에, 좋은 것은 당신이 아무것도 구현할 필요가 없다는 것입니다; 그러나 추상화를 명심하십시오. 이것에 대한 단서는 부스트 매뉴얼 http://www.boost.org/doc/libs/1_53_0/libs/optional/doc/html/boost_optional/development.html#boost_optional.development.the_interface에 나와 있습니다. "결과적으로 경우에 따라 (선택 사항)을 T *로 바꿀 수는 있지만 항상 그런 것은 아닙니다. " – alfC

답변

26

짧은 답변 : 제

긴 대답은 : 부스트 사양에 따라 자신의 롤. 문서는 매우 포괄적이며 코드가 복잡하지는 않지만 여전히 평균 이상의 C++ 기술이 필요합니다.

이 답변을 업데이트하려면 : C++ 14는 불행히도 std::optional과 함께 제공되지 않았습니다. 현재 제안 (개정 5)은 N3793이며 별도의 기술 사양으로 제공되거나 C++ 17의 일부가 될 것으로 예상됩니다.

+12

일부 환경에서는 슬프게도 부스트를 사용하는 것이 정치적으로 불가능합니다. –

+3

[부스트에서 선택 사항 만 추출] (http://www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html)에 대해 생각해 보셨습니까? – Nova

+3

왜 부스트 의존성을 없애려고합니까? 오, 이유를 세어 보겠습니다. – einpoklum

12

현재 a proposal for C++14 (또는 C++ 17)이 있습니다. 그래서 대답은 (아마도) 아직 아닙니다.

+4

분명히 C++ 14를 기술적으로 표기했습니다. 사양 (http://en.cppreference.com/w/cpp/utility/optional 참조) :( – Nova

+1

C++위원회에서 '투표'하는 것이 실제로 '투표'를 의미하지 않습니까? –

2

pmr explained과 마찬가지로 현재로서는 불가능하며 C++ 17이 출시 될 때까지는 제공되지 않습니다.

그러나 github에서 single header library을 부스트 또는 표준 옵션의 대체 드롭으로 사용할 수 있어야합니다. 종속 관계가 없습니다 (C++ 11/C++ 14 가능 컴파일러 제외).

관련 문제