C++ 在c++;以字符串形式获取作为参数传递的变量的名称?

C++ 在c++;以字符串形式获取作为参数传递的变量的名称?,c++,C++,我希望能够做这样的事情 int myVar = 3; void logger(int param) { std::cout << nameOf(param) << ": " << param << std::endl; } logger(myVar); // prints "myVar: 3" int-myVar=3; 无效记录器(int参数){ STD::CUT< P>不,你不能在C++语言中这样

我希望能够做这样的事情

int myVar = 3;

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

logger(myVar); // prints "myVar: 3"
int-myVar=3;
无效记录器(int参数){

STD::CUT< P>不,你不能在C++语言中这样做,因为没有反射工具来做这个。 但是,您可以使用预处理器宏来实现所需的效果。请注意,宏是危险的,应尽量避免使用。

首先,编写一个获取参数值和参数名称的实现函数,如下所示:

void logger_impl(int param, std::string param_name) {
  std::cout << param_name << ": " << param << std::endl;
}

这是一个.< /p>

不,你不能在C++语言中这样做,因为没有反射工具来做这个。 但是,您可以使用预处理器宏来实现所需的效果。请注意,宏是危险的,应尽量避免使用。

首先,编写一个获取参数值和参数名称的实现函数,如下所示:

void logger_impl(int param, std::string param_name) {
  std::cout << param_name << ": " << param << std::endl;
}

这里有一个。

这在函数中是不可能的。标识符(变量的名称)在运行时不存在。您可以尝试使用宏(
#define
)来实现这一点,以在编译时基于标识符构造字符串文字。请参阅。仅在宏中可能。该宏将如何?类似于
#define LOG(x)logger(x,#x)
…假设
无效记录器(int-param,std::string-const&)
或诸如此类。是否回答了您的问题?这在函数中是不可能的。标识符(变量名称)在运行时不存在。您可以尝试使用宏(
#define
)编译时基于标识符构造字符串文字。请参阅。仅适用于宏。宏将是什么样子?类似于
#define LOG(x)logger(x,#x)
…假设
void logger(int参数,std::string const&)
或诸如此类。回答了你的问题吗?在我职业生涯的早期,被
strlen
的宏实现所创伤。花了半天的时间思考在我没有半天空闲的时间里发生了什么。现在编译器消息更好了,但我也知道如何更好地阅读它们。@user4581301是的,我有很多小错误N多年来的经验。我真的受不了宏,如果我想发布一个答案,我必须思考几分钟:pI将仅用于调试,不打算将其提交到项目中。搜索“可变宏”并尝试自己解决它。应该不会太难。@ellipticaldoor如果您已经尝试过,但还没有找到解决方案,您可以发布一个新问题。在我职业生涯早期,受到了
strlen
宏实现的创伤。花了半天的时间弄清楚在我没有半天空闲的时间里发生了什么。编译器消息是这几天,我还知道如何更好地阅读它们。@user4581301是的,这些年来我有很多小烦恼。我真的受不了宏,如果我想发布一个答案,我必须思考几分钟:pI只会将其用于调试,不打算将其提交到项目中。搜索“可变宏”试着自己解决。不应该太难。@ellipticaldoor如果你已经尝试过,但还没有找到解决方案,你可以发布一个新问题。