0

在 C++ 中是否可以声明一个具有private std::string数据成员的类,该数据成员用实例符号名称的字符串化/字符串化名称初始化?我可以看到这不适用于临时人员,但对于左值可能吗?

这是我想要的:

#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
}

如果我将构造函数更改为接受一个字符串并引入一个预处理器宏,那么我几乎可以得到我想要的,但它闻起来很糟糕。

#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");

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

4

0 回答 0