2012-11-17 45 views
0

正如標題所問,他們是否有任何g ++內置函數(或任何方法)從類對象指針知道類名? 例如,從類對象指針獲取類名的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)); 
} 

在GCC內置到__PRETTY_FUNCTION__相似,我希望會是g的內置函數++,幫助我們分析源代碼:)

+0

你想讓some_func打印什麼? –

+0

打印對象p的類的名稱。 – jaeyong

+0

而且,顯然,我要打印的不是基礎,而是A或B,它被繼承。 – jaeyong

回答

1

您可以使用的typeid這一點。

#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

謝謝!這正是我想要的。基本類「幾乎總是」具有虛擬功能! – jaeyong