2013-03-12 37 views
0
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);

0123。

out3x3(C);

C = | | 

感谢您的任何帮助。

+0

你可以通过名字第一个参数'std :: string const&name'并打印出来代替'A' – kassak 2013-03-12 13:17:58

回答

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; 

漂亮得多。

+0

这个,再加一个'#define matrixOut(matrixName )out3x3(matrixName,#matrixName)'或类似的... – cHao 2013-03-12 13:19:39

+0

@cHao我的建议是,他们避免这样做。 – 2013-03-12 13:21:35

+0

单独打印名称的问题在于,如果变量名称不止一个字母,格式将会混乱。 – cHao 2013-03-12 13:25:37

1

你可以使用宏作为一个包装称之为

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

,改变函数原型

void out3x3(mat3x3 &A, string name) 

的通话将

OUT3X3(A); 
相关问题