취미 프로젝트 인 2D 게임 엔진의 일부로 이벤트 시스템을 작성하고 있습니다. 이벤트 시스템 디자인의 일환으로, 템플릿 기반 파생 클래스를 기반으로 객체를 매핑해야합니다. 더 나은 문제를 설명하기 위해 다음과 같은 간단한 코드를 살펴컴파일 시간 생성 된 상수 유형 ID
class Base
{
public:
virtual ~Base(){};
int getTypeId() {return typeId_;}
static bool compareIfSameType(Base *a, Base *b)
{return a->getTypeId() == b->getTypeId();}
protected:
int typeId_;
};
template<typename T>
class Derived : public Base
{
public:
Derived(int typeId) {typeId_ = typeId;}
};
int main()
{
Derived<int> obj1(1);
Derived<float> obj2(2);
Derived<float> obj3(2);
if(Base::compareIfSameType(&obj1, &obj2))
cout << "obj1 and obj2 are of equal type\n";
else cout << "obj1 and obj2 are not of equal type\n";
if(Base::compareIfSameType(&obj2, &obj3))
cout << "obj2 and obj3 are of equal type\n";
else cout << "obj2 and obj3 are not of equal type\n";
}
/*output:
obj1 and obj2 are not of equal type
obj2 and obj3 are of equal type*/
가이 코드에 실제 문제가 없지만, 수동으로 각 파생 클래스 인스턴스의 유형을 식별하는 번호를 전달하는 요구 사항은 매우 복잡하고 매우 오류입니다 경향이있다. 는 내가 원하는 것은 자동으로 컴파일시에 T 유형에서 유형 ID를 생성하는 것입니다
Derived<int> obj1;
Derived<float> obj2;
Derived<float> obj3;
if(Base::compareIfSameType(&obj1, &obj2))
//do something...
죄송합니다. 정확히 – aaronman
컴파일 시간에 달성해야 할 일이 무엇인지 혼란 스럽습니다. 현재 파생 클래스의 유형을 나타내는 각 파생 클래스 객체의 생성자에 정수를 전달하고 있습니다. 그 ID가 자동으로 생성되도록하고 싶습니다. – jms
좋아,'typeid'라는 것이 내장되어 있기 때문에 조금 혼란 스러웠다. 내장 된 것과 같은 이름을주지 말아야한다. – aaronman