我希望能够做这样的事情
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/