类名宏

时间:2010-08-25 07:39:55

标签: c++ class macros

  

可能重复:
  CLASS macro in C++

你好,有什么方法可以获取类的名称,如函数名称的 __ FUNCTION __ 吗?我唯一的想法是使用纯虚拟 toString 继承一些基类,并通过手工时间来定义名称。感谢。

4 个答案:

答案 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());
}