2012-02-08 2 views
19

은 거의 std::function로 이동 같은이 boost::shared_ptrC++ 11 표준은 boost :: any와 같은 것을 제공합니까? 예를 <code>boost::function</code>에 대한

함께하지만 std::any를 찾을 수 있습니까? 이름이 변경되었거나 어떤 이유로 든 새 표준에 배치되지 않았습니까?

+13

호 (필러) 부스트의 모든는 그러나 아무것도 그것을 사용하지 못하도록하지 수 std 이동되었습니다하지 –

+0

증가했다.일부 부스트 라이브러리는 C++ 11 용으로 재 작성 될 수 있으며 일부 라이브러리는 이전 버전과의 호환성을 유지하기 위해 계속 사용할 수 있지만 완전히 제거 될 수 있습니다. – CashCow

답변

15

boost의 모든 라이브러리가 표준에 포함되는 것은 아닙니다 (심지어 구성 요소가 제거 된 라이브러리도 포함). 일반적으로위원회는 표준 라이브러리에 추가 할 때 매우 보수적입니다. (포함 된 것이 더 나은 대안이기 때문에 나중에 포함될 수있는 항목을 얻는 것이 불가능하기 때문에).

boost::functionboost::shared_ptr 여기에는 이미 tr1의 부분이 포함되어 있기 때문에 꽤 많이 포함되어 있습니다. 반면에 boost::any은 상처를 만들지 않았습니다. 그러나 나중에 표준 라이브러리에 포함될 수도 있습니다 (예 : 다음 기술 보고서의 here 참조). boost::any을 사용하는 것이 좋지만, 예를 들어 shared_ptr.

결론 :위원회는이

+2

어쩌면 17 가지 변경 사항을 반영하여 답변을 업데이트 할 수 있습니다. –

3

내가 기본 위치는 라이브러리에 포함되지 않을 것으로 생각 포함하는 어떤 눌러 필요성을하지 않았기 때문에 boost::any는, C++ (11)의 일부가 아닙니다 포함되지 않고위원회를 통과하지 않은 한 새로운 표준.

boost :: any가 제출되었는지 확실하지 않습니다. 아마도 그렇지 않습니다. 그러나 여전히 boost :: any를 사용할 수 있습니다.

내 생각 엔 C++ 11의 부스트 라이브러리가 다시 작성되고 일부는 중복 된 것으로 간주되며 나머지는 이동 의미, 이니셜 라이저 목록 및 자동을 사용하도록 변경되어 C++ 11 스타일로 작성됩니다. +11 기능.

대부분의 새 라이브러리는 C++ 11에 있지만, 기존의 부스트 패키지는 C++ 11 컴파일러로 아직 전환하지 않은 상태로 유지 될 예정입니다. 또한 모든 주요 컴파일러에 의해 구현되는 C++ 11의 기능 만 처음에는 패키지에 포함될 것이라고 추측합니다.

이것은 아마도 stackoverflow보다는 프로그래머에게 더 많은 질문이며 comp.std.C++ moderator 및 boost 메일 링리스트에 더 좋습니다.

16

질문이 있기 때문에 우리는 optional 기능으로 C++ 14 표준에서 제외 된 std :: experimental :: any로 발전했습니다.

GCC 5.1에서는 적어도 implemented이었다.

이 기능은 이후 C++ 17에서 표준화되어 std::any이되었습니다. 제한된 알려진 유형 중 하나를 보유하거나 비어있는 유형 안전 통합에 대해서는 C++ 17의 std::variant을 참조하십시오 (팁에 대해 remy-lebeau에게 감사드립니다).

+2

['std :: variant'] (http://en.cppreference.com/w/cpp/utility/variant) ('boost :: variant'와 유사합니다.)도 표준화되어 C++ 17에 나타날 것입니다. –

관련 문제