如何将对象名称另存为字符串

how to save an objects name as a string

本文关键字:另存为 字符串 对象      更新时间:2023-10-16

我想将我的对象名称保存为字符串。请允许我用几行代码来解释一下。

#include <iostream>
#include <string>
#include <stdio.h>
using namespace std; 
class Example
{
public:
  string object_name;
  //code... 
};
int main()
{
  Example object;
  cout<<object.object_name<<endl; //In this case the output should be "object", how to achieve this ?
  return 0;
}

无法从对象内部访问变量名称,因为它仅存在于源代码级别。你能做的最好的事情是向构造函数提供对象的名称:Example object("object"),你甚至可以把它包装在宏中以避免重复:

#define CREATE_OBJECT(TYPE, NAME) TYPE NAME( #NAME )
CREATE_OBJECT(Example, object);

您应该因复制/移动对象而异,因为它将保留可能与副本名称无关的名称。您必须删除复制/移动构造函数,大大降低对象的有用性,并定义新的构造函数,这些构造函数采用现有对象和新名称并为其创建COPY_OBJECT宏。

即便如此,参考文献也存在问题...

DR:通常不值得。

要在C++中获取此功能,您必须自己设置object_name,并且无需为Example实例及其object_name数据成员冗余指定它的唯一方法是使用宏来存储"字符串化"标识符:

#define EXAMPLE(IDN) Example IDN{ #IDN }
EXAMPLE(object);

恕我直言,这很丑陋:人们会将其误认为是运行时函数调用。