如何将对象名称保存为字符串
问题描述:
我想将对象名称保存为字符串。我可以使用几行代码来解释吗?如何将对象名称保存为字符串
#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;
}
答
要获得在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:它通常不值得。
你将它设置为:'object.object_name =“object”;' - 我很确定这不是你想要的答案,但C++没有那种反射/内省。 –
[在运行时获取C++对象名称]的可能重复(http://*.com/questions/468956/get-c-object-name-in-run-time) –
也许看看[C++ reflexion]( http://*.com/questions/41453/how-can-i-add-reflection-to-ac-application) – steiner