C++ 漂亮地打印c+中的变量和值列表+;
我想将变量的名称及其值转储到stderr。以下代码片段一次完成一个变量的任务:C++ 漂亮地打印c+中的变量和值列表+;,c++,c++11,C++,C++11,我想将变量的名称及其值转储到stderr。以下代码片段一次完成一个变量的任务: int x=4; int y=2; #define DUMP_VALUE(x) fprintf( stderr, "%s\n" \ ( #x "=" + std::to_string(x) ).c_str() ) DUMP_VALUE(x); DUMP_VALUE(y); 产出: x=4 y=2 到目前为止还不错。但是我们如何将这个想法扩展到变量列表?例如,此代码片段: int x=4; int y=2; i
int x=4; int y=2;
#define DUMP_VALUE(x) fprintf( stderr, "%s\n" \
( #x "=" + std::to_string(x) ).c_str() )
DUMP_VALUE(x);
DUMP_VALUE(y);
产出:
x=4
y=2
到目前为止还不错。但是我们如何将这个想法扩展到变量列表?例如,此代码片段:
int x=4; int y=2; int z=19;
DUMP_VALUES(x,y,z);
将产生所需的输出:
x=4, y=2, z=19
问题是。。。宏和c++11可变模板的哪种组合可以实现这一点?您可以使用以下内容定义可变模板:
template <class T>
void dump(T t)
{
std::cout << "val=", << t << " ";
}
template <class T, class... Args>
void dump(T t, Args... args)
{
dump(t);
dump(args);
}
int x = 1;
int y = 2;
int z = 3;
dump(x, y, z);
输出:
val=1, val=2, val=3
如果希望打印出来,则在调用dump时必须以某种方式传入变量的名称
这里有一个不错的参考网站,有一些可变的例子:与您的问题无关,但为什么不使用
cerr
?老程序员学习新技巧很慢。通过将#x“=”
置于StringThank>格式,可以提高现有版本的效率,但。。。期望的输出是:x=1,y=2,z=3。不是val=1,val=2,val=3。后者很容易。正如你所说的。前者则不然。