通过传递函数将变量输出为字符串

时间:2013-03-12 13:13:11

标签: c++ string pointers

1 void out3x3(mat3x3 &A)
2 { int i, j;
3   for (i=0; i<3; i++)
4   {   if (i==1)
5           cout << "A = | ";
6       else
7           cout << "    | ";
8       for (j=0; j<3; j++)
9           cout << A.n[j][i] << " ";
10      cout << "|" << endl;
11   }
12 }

这是我正在编写的程序中的函数,用于执行矩阵操作。 mat3x3是一个3x3矩阵的结构(存储为An [3] [3]。而不是第5行输出中的'A',我希望它输出我用于矩阵的任何变量的名称。调用函数。

我只使用A,B和C.我可以写三种不同的功能,但我觉得应该有更好的方法来实现它。

如果我说out3x3(B);它只显示A = | |

我希望这种情况发生:

out3x3(B);

B = | |

out3x3(C);

C = | |

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

运行时不存在变量名称。它们只是编译时构造。您需要做一些事情,比如更改函数以获取std::string参数:

void out3x3(mat3x3 &A, std::string name)
{
  // ...
  cout << name << " = | ";
  // ...
}

然后这样称呼它:

out3x3(A, "A");
out3x3(B, "B");

然后,您可以使用宏来使感觉,就像您没有复制变量名一样。但是,我根本不推荐这个。相反,我建议只是让你的函数打印出矩阵的内容(在| s之间)然后这样做:

cout << "A = ";
out3x3(A);

变量名的打印应完全独立于打印出矩阵的内容。请考虑以下类比:

int x = 5;
cout << x;

这只打印出x的值,没有别的。如果我想标记它,我必须手动执行:

int x = 5;
cout << "x = " << x;

谁知道?也许你会为operator<<类型重载mat3x3,很快就会这样做:

cout << "A = " << A;

更漂亮。

答案 1 :(得分:1)

您可以使用宏作为包装来调用它

#define OUT3X3(mat)        \
    out3x3(&mat, ##mat);

并将函数原型更改为

void out3x3(mat3x3 &A, string name)

电话会是

OUT3X3(A);