2012-11-17 6 views
0

제목에서 묻는 것처럼 클래스 객체 포인터에서 클래스 이름을 알 수있는 g ++ 내장 함수 (또는 모든 메서드)가 있습니까? 예를 들어 , GCC 내장에 __PRETTY_FUNCTION__ 유사클래스 개체 포인터에서 클래스 이름을 가져 오는 G ++ 기본 제공?

class Base { 
}; 
class A : public Base { 
}; 
class B : public Base { 
}; 

void some_func(Base *p) { 
    printf("the name of class: %s", __some_g++_builtin_get_class_name(p)); 
} 

, 나는 우리가 소스 코드 : 당신은 이것에 대한 유형 ID를 사용할 수 있습니다

+0

some_func를 인쇄 하시겠습니까? –

+0

개체 p의 클래스 이름을 인쇄합니다. – jaeyong

+0

그리고 분명히 인쇄하고자하는 것은 Base가 아니라 상속 된 A 또는 B입니다. – jaeyong

답변

1

를 분석하는 데 도움 g을위한 내장 함수 ++있을 것입니다 바랍니다.

#include <cstdio> 
#include <typeinfo> 

class Base { 
    virtual int foo() { return 0; } 
}; 
class A : public Base { 
}; 
class B : public Base { 
}; 

void some_func(Base *p) { 
    printf("the name of class: %s\n", typeid(*p).name()); 
} 

int main() { 
    some_func(new A); 
} 

불행하게도 그것은 아마 당신의 기본 클래스는 적어도 하나 개의 가상 함수를 (다른 유형의 정보가 제공되지 않을 수 있습니다)하지 않는 한 당신이 원하는 것을하지 않습니다.

__PRETTY_FUNCTION__과 달리 찾고자하는 값은 컴파일 할 때 계산할 수 없습니다.

+0

감사! 그것은 내가 원하는 것입니다. Base 클래스는 "거의 항상"가상 함수를 가지고 있습니다! – jaeyong

관련 문제