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 = | |
感谢您的帮助。
答案 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);