当我需要在其中一个方法中获取类名时,我只需要调用:
typeid(*this).name()
(然后我将结果拆分为令牌并获取类名称)
现在我必须定义一个静态成员变量,并且需要为其获取类名。 但我不是一个方法! 所以,我不能使用(* this)。
最初,我认为我可以做类似的事情:
#define INIT_STAT_VAR
const char * cname = typeid(*this).name;
int cname##::var = 1;
知道如何获取静态成员变量定义的类名吗? (不,我不能直接为定义写出类的名称;])
谢谢!
答案 0 :(得分:1)
我认为不能直接做你想做的事情 - 因为静态方法不会得到一个它不能在其上调用typeid
的对象指针。您可以在静态方法中创建一个临时对象,并在typeid上使用它,但这几乎与使用它作为静态方法相反。
另一种解决方案(如果可以保证至少定义了1个类的实例)将创建一个静态成员变量,您可以在构造函数中初始化一次,然后从静态方法访问。这有点hacky,但有效:
#include <typeinfo>
#include <string>
class Foo {
public:
Foo() {
if (name == NULL) {
const std::type_info& id = typeid(*this);
name = new std::string(id.name());
}
// Normal object creation.
}
static std::string getName() { return *name; }
private:
static std::string* name;
};
std::string* Foo::name = NULL;
答案 1 :(得分:0)
您可以使用typeid(ClassName).name()
...但您也可以只使用"ClassName"
。
答案 2 :(得分:0)
如果您的编译器支持,请使用__class__
宏。