我正在扩展我们的内部调试库,而且我遇到了一个奇怪的问题.我想输出一个变量名作为字符串.从本网站的其他地方,我发现可以在文件中使用宏来执行此操作:
#define VarToStr(v) #v
...
printf("%s\n", VarToStr(MatName));
Run Code Online (Sandbox Code Playgroud)
这输出MatName.但现在让我们通过跨文件的函数来尝试这个(Matrix是一个定义的类型):
// DebugHelpers.h
#define VarToStr(v) #v
...
void PrintMatrix(const Matrix &InputMat)
{
printf("%s\n", VarToStr(InputMat));
... // output InputMat contents
}
// DataAnalysis.cc
#include DebugHelpers.h
...
void AnalysisSubProgram342()
{
Matrix MatName;
...
PrintMatrix(MatName);
}
Run Code Online (Sandbox Code Playgroud)
这输出InputMat,而不是MatName.另一个文件中的函数如何从调用文件中获取变量名?
虽然更复杂的解决方案(包装类等)对更大的社区有用,但我的实现需要最小化对预先存在的代码/类的影响.
更新:
受天顶评论的启发,我为了比较而实施了他提出的两个解决方案,并且快速完成了工作.该宏适用于简单输出,而该功能允许更复杂的工作(以及类型检查/重载).我不知道预处理器宏可能如此复杂.我会记住两者以备将来使用.谢谢 !
c++ ×1