2013-06-07 3 views
6

나는 C++ project을 가지고 있습니다. 나는 C++로 반 사실적인 프로그램을 만드는 것에 대해 가르쳐주기 위해 프로젝트를 진행한다. 그것은 웹 사이트에서 재귀 적으로 콘텐츠를 다운로드합니다.C++ 선택 객체 표현

각 다운로드에는 다운로드 할 URL과 참조 자 URL (또는 콘텐츠가 추출 된 페이지의 URL)이 있습니다.

첫 번째 URL이 아니면 항상 리퍼러가 있습니다. 나는 속임수를 쓰고 있었고 첫 번째 URL을 자체 리퍼러로 취급하고있었습니다. 최근 URL 클래스를 빈 (또는 빈) 표현으로 변경했습니다. 이것은 해킹처럼 느껴집니다.

C에서 선택 객체를 표현하는 방법이없이 ++ 있습니까 :

  • 포인터를 사용하십니까?
  • 유효하지 않은 개체의 공간을 낭비하고 있습니까?
  • 또는 "빈"버전의 개체 만들기?
+0

W \ O : 포인터 사용? IMHO 아닙니다. – Najzero

답변

5

boost :: optional을 사용할 수 있습니다. 부스트는 잘 알려진 제 3 자 라이브러리입니다. 새 stl 함수의 프로토 타입으로 간주되는 경우가 많습니다. Ralph의 대답 std :: optional은 new C++에서 사용할 수 있습니다.

당신이 C++ (14) 컴파일러가있는 경우 http://www.boost.org/

+0

나는 그것을 코멘트로 원래 게시했지만 "빈"버전의 낭비 공간은 없을 것입니다. 그것이 심각한 문제라고 생각하지는 않지만 질문의 구체적인 요구 사항 중 하나입니다. – BoBTFish

+2

번호 boost :: optional은 구현시 적절하게 NULL로 설정된 포인터를 사용합니다. 옵션이 어떻게 작동하는지 모르겠다. – Bathsheba

+0

@ Bathsheba 나는 기존의 관행을 재발하는 것을 피하려고 노력하고있다. 나는'unique_ptr'을 사용했으나 코드가 한쪽으로 치우쳐 진다고 결정했습니다. 나는 "이 분야는 선택 사항"이라고 명시 적으로 말하지 않고 있다고 느꼈다. 대신 메모리 관리 기술처럼 보였습니다. –

5

에서, std::optional 템플릿을 사용하십시오. 그렇지 않다면 boost::optional 또는 std::unique_ptr을 사용할 수 있습니다. 포인터를 사용하지 않고 잘못된 개체에 공간을 낭비하지 않아야합니다. std::optional에는 선택적 개체 인 std::unique_ptr이 포함될 것입니다.

+0

+1 당신을 위해 랄프 : 정말 새로운 C++로 옮겨야합니다 ;-) – Bathsheba