gpt4 book ai didi

c++ - 在 C++ 中打印变量名的通用方法

转载 作者:可可西里 更新时间:2023-11-01 17:03:50 28 4
gpt4 key购买 nike

上课

struct {
int a1;
bool a2;
...
char* a500;
...
char a10000;
}

我要打印或流出

"a1 value is SOME_VALUE"  
"a2 value is SOME_VALUE"
"a500 value is SOME_VALUE"
...
"a10000 value is SOME_VALUE"

成员变量的类型不一样(主要有int、bool、char*等,即不需要重载<<运算符),成员变量名可以任意命名,即不需要遵循的规则。有没有通用的方法,而不是一个一个地显式输入(非常繁琐且容易出错的工作)?

感谢任何评论!

最佳答案

你可以使用一个邪恶的宏:

#define DUMP(a) \
do { std::cout << #a " is value " << (a) << std::endl; } while(false)

使用示例(编辑 现在更新了结构成员的示例):

#include <iostream>

#define DUMPSTR_WNAME(os, name, a) \
do { (os) << (name) << " is value " << (a) << std::endl; } while(false)

#define DUMPSTR(os, a) DUMPSTR_WNAME((os), #a, (a))
#define DUMP(a) DUMPSTR_WNAME(std::cout, #a, (a))

struct S {
int a1;
float a2;
std::string a3;

std::ostream& dump(std::ostream& os)
{
DUMPSTR(os, a1);
DUMPSTR(os, a2);
DUMPSTR(os, a3);
return os;
}
};

int main()
{
S s = { 3, 3.14, " 03.1415926" };

s.dump(std::cout);

DUMP(s.a1);
DUMP(s.a2);
DUMP(s.a3);

return 0;
}

看直播demo on CodePad

为什么要使用有趣的宏?

回答未提出的问题。考虑一下如果将宏调用嵌套在条件循环或 for 循环中会发生什么。 Marshall Cline explains the rest

关于c++ - 在 C++ 中打印变量名的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622962/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com