, 그래서 (이 실제 코드가 아닙니다) 제가 예를 보여 드리겠습니다 : 기본적으로타입 캐스팅 방법 포인터
template <class T>
class ArrayStorage {
protected:
void processStuff(void (ArrayStorage<T>::*procedure)(T *)) {
for (int i = 0; i < count; i++)
(this->*procedure)(content[i]);
}
// No method of type void (ArrayStorage<T>::*)(T *)
private:
T **content;
int count;
};
class DrawableStorage : public ArrayStorage<Drawable> {
public:
void drawStuff() {
processStuff((void (ArrayStorage<Drawable>::*)(Drawable *)) &DrawableStorage::drawOne);
}
private:
void drawOne(Drawable *item) {
item->draw();
}
};
, 일반적인가 컨테이너를 사용하여 항목을 반복하고 각각에 대한 메소드를 사용할 수 있습니다 (포인터가 매개 변수에 있음). 그러나이 메서드는이 클래스에는 없지만 해당 하위 클래스에만 있습니다. Subclass "drawStuff"메서드에서 서브 클래스의 메서드 포인터를 제공하지만 기본 클래스의 메서드로 형식이 지정되었는지 확인할 수 있습니다.
대단히 성공적으로 컴파일되고 정상적으로 작동합니다.
내 질문은, 그건 내 우연의 일치는 내 특정 컴파일러는 실제로 그것을 완전히 처리 할 수있는 동안 내가 그것을 제거해야하거나 올바른 방법 포인터의 사용법입니다?
감사합니다.
그래, 생각해 봤지만 내 버전이 가능한지 궁금해서. – Detheroc
@Detheroc : 당신이 쓰는 방식이 아닙니다. 기본 클래스에 가상 인터페이스가 있다면 어쩌면이 방법이 완벽하게 사용할 수 있다면 왜 귀찮을까요? 전체 함수 호출은 아마 인라인 될 것이고 실제 코드를 발생시키지 않을 것이다. –