我正在尝试使用宏打印到控制台,调试(日志记录)时显示成员值的变量名称。 怎么做?我尝试了以下但它不起作用。
#define MY_PRINT(x) std::cout << "'x'=" << x << std::endl;
int main(){
int my_variable=3;
MY_PRINT( my_variable );
// I would like to print to console
// 'my_variable'=3
}
答案 0 :(得分:17)
奥奇......我找到了解决方案。
我应该像这样编写宏
#define MY_PRINT(x) std::cout << #x"=" << x << std::endl
答案 1 :(得分:2)
对于C ++,我使用它:
#define STR(x) #x << '=' << x
int main()
{
int i = 1;
std::string str("hello");
std::vector<std::string> vec;
my_class mc;
...
std::cout << STR(i) << std::endl
<< STR(str) << std::endl
<< STR(vec) << std::endl
<< STR(mc) << std::endl;
return 0;
}
这样编译器会根据数据类型选择流操作符,因此您不需要为每个宏打扰不同的宏,它可以转到任何std :: ostream,而不仅仅是std :: cout。只需为您的数据提供适当的流媒体运营商:
std::ostream operator<<(std::ostream&, const T&);
std::ostream operator<<(std::ostream&, const std::vector<T>&);
etc
但是我希望有一种模板方法来替换宏,或者至少是#x提供的变量名。