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

问题描述:

我想将对象名称保存为字符串。我可以使用几行代码来解释吗?如何将对象名称保存为字符串

#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; 
} 
+2

你将它设置为:'object.object_name =“object”;' - 我很确定这不是你想要的答案,但C++没有那种反射/内省。 –

+2

[在运行时获取C++对象名称]的可能重复(http://*.com/questions/468956/get-c-object-name-in-run-time) –

+0

也许看看[C++ reflexion]( http://*.com/questions/41453/how-can-i-add-reflection-to-ac-application) – steiner

要获得在C++这个功能,你必须设定object_name自己,要做到这一点,而不冗余指定它为Example实例及其object_name数据成员是使用宏来存储的唯一途径“串化”的标识符:

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

EXAMPLE(object); 

这是相当丑陋的恕我直言:人们会误认为它是一个运行时函数调用。

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

#define CREATE_OBJECT(TYPE, NAME) TYPE NAME(#NAME) 

CREATE_OBJECT(Example, object); 

您应该复制/移动物体不同,因为它会保留名称这可能与复制名称不相关。您将删除复制/移动构造函数,大大减少对象的用处,并定义新的构造函数,这些构造函数使用现有对象和新名称,并为其创建宏。

即便再有是引用一个问题...

TL; DR:它通常不值得。