2012-12-11 7 views
0

이 같은 뭔가를 이 벡터의 모든 요소가 tick() 메서드를 갖지는 않지만 벡터를 통해 반복하고 모든 요소에 draw()을 호출 할 수 있기를 원하기 때문에 동일한 벡터에 넣고 싶습니다. 이 문제를 해결할 방법이 있습니까? 나는 다른 벡터를 가지고있는 것을 고려하고있다. 그러나 나는 오히려하지 않을 것이다.통화 기능은

+0

'tick'메소드를 구현하는 타입에'dynamic_cast'를 시도해보십시오. 또는 기본 클래스에서 해당 메서드를 구현하지 않는 형식을 수행하지 않는 가상 구현을 사용하십시오. – Nim

+3

아니요, 이러한 작업을 수행하지 마십시오. 해당 오브젝트 중 일부만 호출하려는 함수를 구현하는 오브젝트 벡터가있는 경우에는 여러 콜렉션에 있어야합니다. 의미가있는 인터페이스를 만들고, 인터페이스가 _ 생할 때만 파생시킵니다. –

+1

이것은 매우 흥미로운 문장'vector [i] - tick();' –

답변

5

위젯이 vector인데 위젯 중 일부에만 딩벳이있는 경우 정말 모든 위젯입니까?

귀하의 경우에는 동일하지 않은 내용이 vector입니다. 이것이 당신 문제입니다. 물론, 당신은 연필 컵에 전함을 넣을 수있는 복잡한 해킹 메커니즘을 생각해 낼 수 있습니다. 또는 당신은 내가 옳은 일 중 하나가 될 것으로 생각 하는데요 무엇을 할 수있는 :

  1. 당신이 연필 컵에 넣어 있는지 모든 것을 확인한다
  2. 이 전함을 넣어 다른 곳을 만들기 연필에게.

위의 2 번은 이미 언급 한 것처럼 별도의 벡터를 생성합니다. 번호 1은 기본 클래스에서 빈 (사소한) 구현으로 virtual tick() 메소드를 제공하는 것처럼 간단 할 수 있습니다.

+0

나는이 대답을 좋아한다, 고마워. :) – Topsic

0

this case에서 방문자 패턴을 사용할 수 있다고 생각합니다. 그러나 그것은 최선의 해결책이 아닙니다. 당신은 Liskov 치환 원칙을 저지합니다. 계층 구조를 다시 생각해보십시오.