2011-04-13 3 views
1

관련없는 상점에서 일하는 상점이있는 공장이 있습니다. 일부 상점에서는 일하거나 개인 자동차 및 거기에서 파생 된 클래스 (자동차, SUV, 오토바이) 및 그 밖의 클래스는 군용 차량 및 거기에서 파생 된 클래스 (탱크, 비행기, 잠수함)에서 작동합니다.std :: type_info 객체가 다른 객체 또는 다른 객체에서 파생 된 클래스와 같은지 여부를 알 수 있습니까?

이 질문은 내 공장 클래스와 관련이 있습니다.이 클래스는 상점에서 무엇을하고 있는지 신경 쓰지 않지만 적절한 유형의 차량이 올바른 상점으로 라우팅되고 있는지 확인하기위한 서비스를 제공합니다. 즉, Audi A4가 적재 도크에 나타나면 개인 자동차로 식별되어 개인 자동차 상점에 전달되어야합니다.

팩토리 클래스에서 가능한 차량 유형을 선언하지 않고도이 작업을 수행 할 수 있습니까?

그래서, 더 C++ 코딩 특성에, 나는 내 공장 차량 (예를 들어, 개인 자동차, 또는 군용 차량)의 기본 클래스에 std::map<shop *, const std::type_info *>std::type_info *이 상점에 의해 제공되었다 컨테이너 및 포인트를 가질 수있다 생각했다. 그러나 ... 개체에 대한 std::type_info이 해당 후보에서 파생 된 또는과 동일한 지 확인하는 방법을 찾을 수 없었습니다.

공장에서 적어도 기본 차량 유형 (개인 자동차 및 군용 차량)을 알고있는 경우 개인 자동 포인터 나 군용 차량 포인터에 작용하는 dynamic_cast<>()을 사용하여 유형 평등 또는 파생 여부를 확인하는 방법을 알고 있습니다. 기지에서. 그러나 공장을 가능한 한 일반화하기를 희망합니다.

아이디어가 있으십니까?

답변

1

왜 가게에 자신이 누구인지 알려주지 않겠습니까? 공장이 구현해야하는 규칙의 지식을 가지고 그래서

virtual bool CanBeShipped() const = 0; 
virtual bool IsMilitary() const = 0; 

같은 규칙에 따라 방법과 모든 상점이 구현해야하는 인터페이스를 작성 .

+0

이렇게하면 모든 상점에서 모든 종류의 모든 물건을 알 수 있어야합니다. 즉 IsMilitary()는 개인 상점이 다른 상점에서 군대 물건을 생산한다는 사실을 알리도록 요구합니다. – NoahR

0

내가 원하는 std :: type_info 객체의 작업 유형을 사용할 수 없다.

차선책은 식별 책임을 상점으로 푸시하는 것입니다. 상점에서는 특정 제품 테이블과 유형 식별 테이블을 유지 관리합니다. 예 :

std::list<const std::type_info *> productsMadeHere; 

또한 상점은 특정 유형을 허용하는 경우 팩토리가 상점을 폴링하는 데 사용할 수있는 공통 인터페이스를 제공합니다.

Shop::isThisMadeHere(std::type_info * product_type); 
관련 문제