当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

C++-类名宏

admin 117℃

可能重复:
CLASS macro in C++

喂,有什么方法可以用宏来获取类的名称,比如用函数名来获取类的名称吗?我唯一的想法是用纯虚tostring继承一些基类,并用手定义名称。谢谢。

使用宏定义类:

#define CLASS_WITH_NAME(name)  name { const char * __NAME = #name;

class CLASS_WITH_NAME(class_name) // No "{" here!

丑陋的黑客,但我能想到的最好的。

这取决于具体的背景。获取类的实现定义的内部名称的粗略等价方法是使用typeid运算符,如图所示。请注意,输出是由实现定义的。

typeid(yourclass).name()

最简单的方法可能是(定义宏)调用一些函数来从 __FUNCTION__ (或 __PRETTY_FUNCTION__ 对于海合会,或者甚至 __FILE__ ).

另一个替代方案可能如下,尽管它有自己的缺点

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

转载请注明:我的代码 » C++-类名宏