我正在使用日志调试一些c ++代码,并且想知道是否有办法让每个函数打印其返回值。
我知道我可以将它存储在调用函数范围的变量中并使用它来进行打印,但这需要添加代码行,临时变量以及更多的工作。
所以我想在我想要的每个函数的开头添加一个MACRO,并且宏会在块的开头和它的返回值的末尾打印函数的名称。
我已经有一个宏用于在块的开始\结束时使用以下内容打印函数:
#include <string>
#include <iostream>
#define SCOPE_LOG() ScopedLog log(__FUNCTION__)
class ScopedLog {
public:
ScopedLog(std::string msg) : _msg(msg) {
std::cout << "Entering: " << _msg << std::endl;
}
~ScopedLog() {
std::cout << "Exiting: " << _msg << std::endl;
}
private:
std::string _msg;
};
int foo(int x)
{
SCOPE_LOG();
return x + 1;
}
int main()
{
foo(5);
return 0;
}
以上将打印:
Entering: foo
Exiting: foo
我希望能够打印出来:
Entering: foo
Exiting: foo , retVal = 6
我有一些关于如何做到这一点的想法,但它们并不理想(至少可以说)。
那么,有没有办法做这样的事情? (也许是通过scopedLog d'tor访问堆栈?)
我很感激任何答案,即使它做出一些假设,也是不完整等等。
我更感兴趣的是我无法想到的新方法,而不是完美但从未使用过的解决方案。