可能重复:
CLASS macro in C++
你好,有什么方法可以获取类的名称,如函数名称的 __ FUNCTION __ 吗?我唯一的想法是使用纯虚拟 toString 继承一些基类,并通过手工时间来定义名称。感谢。
答案 0 :(得分:8)
这取决于具体情况。获得实现定义的类的内部名称的粗略等价物可以是使用如图所示的typeid运算符。请注意,输出是实现定义的。
typeid的(yourclass)。名称()
答案 1 :(得分:6)
最简单的可能是(定义一个宏)调用某个函数来从__FUNCTION__
(或__PRETTY_FUNCTION__
获取GCC,或者甚至是__FILE__
)派生类名。
答案 2 :(得分:3)
使用宏来定义类:
#define CLASS_WITH_NAME(name) name { const char * __NAME = #name;
class CLASS_WITH_NAME(class_name) // No "{" here!
丑陋的黑客,但我能想到的最好。
答案 3 :(得分:2)
另一个替代方案可能如下,尽管它有自己的缺点
map<string, string> classdescrmap; // store association system name, development name
struct A{
A(){
classdescrmap[typeid(*this).name()] = "A";
}
};
struct B : A{
B(){
classdescrmap[typeid(*this).name()] = "B";
}
};
string getname(string const &key){
return classdescrmap[key];
}
int main(){
B b;
cout << getname(typeid(b).name());
}