c++ - 在c++中,是否有可能以字符串的形式获取作为参数传递的变量的名称?

标签 c++

我希望能够做这样的事情

int myVar = 3;

void logger(int param) {
  std::cout << nameOf(param) << ": " << param << std::endl;
}

logger(myVar); // prints "myVar: 3"

最佳答案

不,您还不能用C++语言执行此操作,因为没有反射工具可以执行此操作。
但是,您可以使用预处理器宏来实现所需的效果。 请注意,宏是危险的,应尽可能避免使用。
首先,编写一个使用参数值和参数名称的实现函数,如下所示:

void logger_impl(int param, std::string param_name) {
  std::cout << param_name << ": " << param << std::endl;
}
然后,您可以编写一个宏,该宏使用#(字符串化运算符)从调用站点中的变量名称生成一个字符串,然后在对实现函数的调用中使用该字符串:
#define logger(p) logger_impl(p, #p)
这是demo

关于c++ - 在c++中,是否有可能以字符串的形式获取作为参数传递的变量的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65064054/

相关文章:

c++ - if 基于用户输入的语句

c++ - 从 void 函数访问局部变量

c++ - 如何正确使用 cv::triangulatePoints()

c++ - 如何在 C/C++ 中将 int 添加到 char[]

c++ - 显示QList内容

c++ - 如何将 vector 值写入文件

c++ - 如何独立于标准启用 GCC 的 GNU 扩展?

C++ 指针和递增运算符 (++)

c++ - Qt图表错误: ASSERT: "width > 0.0" in file painting\qrasterizer. cpp,第761行

c++ - 从 map 中检索对象实例