我们可以使用“;这”;指针 >我想在运行时以编程方式检索C++类实例的标识符。我知道C++还不支持反射,但是有没有其他的解决方案呢? 例如,给出以下示例: class Foo { Foo() { auto name = reflect::getIdentifierName(this); std::cout << name << std::endl; } }; void main() { Foo my_obj; } class-Foo{ Foo(){ auto name=reflect::getIdentifierName(this); std::cout

我们可以使用“;这”;指针 >我想在运行时以编程方式检索C++类实例的标识符。我知道C++还不支持反射,但是有没有其他的解决方案呢? 例如,给出以下示例: class Foo { Foo() { auto name = reflect::getIdentifierName(this); std::cout << name << std::endl; } }; void main() { Foo my_obj; } class-Foo{ Foo(){ auto name=reflect::getIdentifierName(this); std::cout,c++,gcc,reflection,introspection,libclang,C++,Gcc,Reflection,Introspection,Libclang,是的,但这是实现定义的。请自行承担风险 如果没有更多的背景,尤诺什的建议听起来更合理 #include <iostream> #include <typeinfo> class Foo { public: Foo() { const char * const name = typeid(this).name(); std::cout << name << std::endl; } }; int main() { Foo

是的,但这是实现定义的。请自行承担风险

如果没有更多的背景,尤诺什的建议听起来更合理

#include <iostream>
#include <typeinfo>

class Foo {
public:
  Foo() {
   const char * const name = typeid(this).name();
   std::cout << name << std::endl;
  }
};

int main()
{
   Foo my_obj;
}
#包括
#包括
福班{
公众:
Foo(){
const char*const name=typeid(this.name();

STD::CUT不是类名,它是对象的标识符。您是否考虑将名称作为一个字符串给构造函数,存储它并从一个吸收器返回它?一个对象没有名字,一个变量。一般来说,对象和变量之间没有1:1的关系。我在寻找一个可以帮助编程的工具。ally检索类对象实例的名称(而不是类的名称)。例如任何解析器工具。谢谢您的回答。此解决方案将输出“Foo”,它不是“my_obj”,我正在寻找打印类实例变量而不是类名的方法。这是什么“类实例变量”您提到了吗?我不知道有任何自动提供的变量,但您可以通过使用静态变量或仅通过使用this指针获取每个对象的唯一地址来创建自己的变量。