Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 漂亮地打印c+中的变量和值列表+;_C++_C++11 - Fatal编程技术网

C++ 漂亮地打印c+中的变量和值列表+;

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

我想将变量的名称及其值转储到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; 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。后者很容易。正如你所说的。前者则不然。