作为字符串数据成员的变量名 在C++中,可以声明一个类,它具有一个类:私有STD::String < /Cord>数据成员,它是用实例符号名的纵横化/简化化名称初始化的?我可以看出,这对临时人员不起作用,但对左值人员有可能吗

作为字符串数据成员的变量名 在C++中,可以声明一个类,它具有一个类:私有STD::String < /Cord>数据成员,它是用实例符号名的纵横化/简化化名称初始化的?我可以看出,这对临时人员不起作用,但对左值人员有可能吗,c++,metadata,c-preprocessor,stringification,C++,Metadata,C Preprocessor,Stringification,以下是我想要的: #include <iostream> #include <string> class symbol { public: symbol() { // here goes some magical sauce } void print() { std::cout << s_ << std::endl; } private: std::string s_; }; int main() { symbol bar,

以下是我想要的:

#include <iostream>
#include <string>

class symbol {
 public:
  symbol() { // here goes some magical sauce }
  void print() { std::cout << s_ << std::endl; }
 private:
  std::string s_;
};

int main() {
  symbol bar, bah;
  bar.print()  // should print "bar" to STDOUT
  bah.print()  // should print "bah" to STDOUT
}

因为读起来很烦人,打字很烦人,而且是多余的。我可以理解为什么在某些情况下,您可能希望存储一个不同于变量名的字符串,但我特别尝试解决一个问题,即您希望字符串与字符串化变量名相等

不,如果没有额外的宏,这是不可能的,而且许多(我敢说大多数)变量都没有名称。这就是调试器的作用。@Pubby我之所以需要它,是因为如果我构建了一个允许数学运算的符号类,我希望能够生成与原始源代码中变量名相同的代码。另外,我想要它,因为正如我提到的,
symbol phi(“phi”)意味着您要输入两次phi,您必须记住同时更改这两个选项——这是用户的一个错误源。@SethCarnegie我知道如何使用调试器,但这并不能解决我的问题,将变量名嵌入到每个实例中作为元数据,以便代码输出与原始源中使用的变量名相同。抱歉,但在C++中是不可能的。你能做的最好的就是你的宏。而且把问题写多次也无济于事。@SethCarnegie谢谢你指出重复的地方,我知道把问题写多次也无济于事。我犯了一个错误,因为我关闭了浏览器并认为我没有提交。我删除了另一个问题。
#define makesymbol(x) foo x(#x)
symbol(const std::string & s) : s_(s) {}

// Now I can do:
makesymbol(test);
test.print();  // <--- This prints "test" followed by a newline to STDOUT
symbol phi("phi");