获取带有typeid(* this).name的静态int变量类名,用于自己的定义 - C ++

时间:2009-07-19 10:04:08

标签: c++ visual-studio

当我需要在其中一个方法中获取类名时,我只需要调用:

typeid(*this).name()

(然后我将结果拆分为令牌并获取类名称)

现在我必须定义一个静态成员变量,并且需要为其获取类名。 但我不是一个方法! 所以,我不能使用(* this)。

最初,我认为我可以做类似的事情:

#define INIT_STAT_VAR
   const char * cname = typeid(*this).name;
   int cname##::var = 1;

知道如何获取静态成员变量定义的类名吗? (不,我不能直接为定义写出类的名称;])

谢谢!

3 个答案:

答案 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__宏。