在C++中为每个方法调用执行某些代码

Luí*_*rme 7 c++ methods

我有一个我想要检查的C++类.所以,我希望所有方法在出门之前打印他们的参数和返回.

后者看起来有点容易.如果我为一切返回(),一个宏

#define return(a) cout << (a) << endl; return (a)
Run Code Online (Sandbox Code Playgroud)

如果我将所有返回括号化为括号(或者可以调用的任何东西),它会做(可能是错误的).如果我想把它拿出来,只需注释掉定义.

但是,打印输入似乎更难.有没有办法,我可以使用C++结构或workaroud黑客?

Jos*_*ley 8

我想到了一些选择:

  • 使用调试器.
  • 使用装饰器模式,如Space_C0wb0y建议的那样.但是,这可能是很多手动输入,因为您必须复制装饰类中的所有方法并自己添加日志记录.也许您可以通过在类上运行doxygen然后解析其输出来自动创建装饰器对象...
  • 使用面向方面的编程.(Logging,这是你想要做的,是AOP的常见应用.) Wikipedia列出了一些C++的AOP实现:AspectC++,XWeaverFeatureC++.


Dan*_*nas 4

然而,打印输入似乎更困难。有没有办法使用 C++ 结构或解决方法来做到这一点?

不。


更新:我将在回答中失去一些简洁性,建议您可以通过应用“按合同设计”来实现您所需要的。