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

时间:2016-04-21 10:28:43

标签: c++ string

我想将对象名称保存为字符串。我可以解释几行代码。

#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 个答案:

答案 0 :(得分:3)

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

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

CREATE_OBJECT(Example, object);

您应该根据复制/移动对象进行操作,因为它会保留可能与复制名称无关的名称。您将删除复制/移动构造函数,大大降低对象的有用性,并定义新的构造函数,这些构造函数接受现有对象和新名称并为其创建COPY_OBJECT宏。

即便如此,引用也存在问题......

TL; DR:它通常不值得。

答案 1 :(得分:0)

要在C ++中获得此功能,您必须自己设置foreach ($currentJobsXML->Jobs->Job as $job) { //$seconditerator = 0; foreach($jobsQuoteXML->Quotes->Quote as $quote) { if((string)$quote->State == 'Accepted') { if ((string)$job->Name == (string)$quote->Name) { //$finalArray[$iterator]['TEST'][$seconditerator] = array( $finalArray[$iterator]['TEST'][] = array( 'Job ID' => (string)$job->ID, 'Project Name' => (string)$job->Name, 'Client' => (string)$job->Client->Name, 'Quote Exc VAT' => (string)$quote->Amount, 'VAT Amount' => (string)$quote->AmountTax, 'Total Amount' => (string)$quote->AmountIncludingTax ); //$seconditerator++; } } } $iterator++; } ,并且无需为object_name实例及其Example数据冗余指定它,这是唯一的方法member是使用宏来存储“stringified”标识符:

object_name

那是非常丑陋的恕我直言:人们会把它误认为是运行时函数调用。