B
및 C
은 A
에서 파생됩니다. A
에서 파생 된 클래스의 두 인스턴스가 같은 클래스의 인스턴스인지 여부, 즉 과 A* bar
이 B
인스턴스를 가리키는 지 RTTI를 사용하지 않고 테스트 할 수 있기를 원합니다. 나의 현재 솔루션은이 같은 것입니다 :이 방법을 사용하면RTTI가없는 유형 평등에 대한 테스트
class A {
protected:
typedef uintptr_t Code;
virtual Code code() const = 0;
}; // class A
class B : public A {
protected:
virtual Code code() const { return Code(&identity); }
private:
static int identity;
}; // class B
class C : public A {
protected:
virtual Code code() const { return Code(&identity); }
private:
static int identity;
}; // class C
, operator==
단순히 first.code() == second.code()
을 테스트 할 수 있습니다. 파생 클래스에서 리터럴 identity
을 제거하고 코드가 A
에 의해 자동으로 검색되도록하고 싶습니다. 따라서 모든 파생 클래스가이 관용구를 반복하지 않아야합니다. 다시 말하지만, RTTI를 사용하지 않는 것이 좋습니다. 이 일을 할 수있는 방법이 있습니까?
참고 : 내가 최근 질문을 본 [1] 및 [2],이 중복되지 않습니다있다. 해당 포스터는 내용을 파생 클래스로 테스트하려고합니다. 난 단지 신분을으로 테스트하고 싶다.
RTTI를 사용하지 않으면 다시 발명해야 할 운명입니다. 불완전하게. –
호기심에서 벗어남 : 왜 RTTI를 사용하는 대신이 방법을 사용 하시겠습니까? –
@nobugz : 나는 모든 것을 다시 발명하지는 않는다. 더 큰 기본 제공 기능에서 사용할 기능 하나만 에뮬레이트하고 있습니다. @Laurence :이 프로젝트는 어디에서나 실행할 수 있어야합니다.두 개의 정수를 비교하는 것 이상의 공간 오버 헤드와 런타임 오버 헤드를 원하지 않습니다. –