我有一个我想要检查的C ++类。因此,我希望所有方法在出门之前打印他们的参数和返回。
后者看起来有点容易。如果我为一切返回(),那么宏
#define return(a) cout << (a) << endl; return (a)
如果我将所有返回到括号中(或者可能被调用的任何内容),那么会这样做(可能是错误的)。如果我想把它拿出来,只需注释掉定义。
但是,打印输入似乎更难。有没有办法,我可以使用C ++结构或workaroud黑客?
答案 0 :(得分:8)
我想到了一些选择:
答案 1 :(得分:4)
但是,打印输入似乎更多 难。有没有办法可以做到, 使用C ++结构或使用 workaroud hack?
没有
更新:我会在答案中失去一些简洁性,建议您可以通过应用Design by Contract来达到所需要的目标。
答案 2 :(得分:2)
听起来你想对我使用调试工具。这样您就可以看到所需的所有参数。
答案 3 :(得分:2)
如果您不介意手动插入一些代码,可以创建一个类:
用法看起来像:
unsigned long long
factorial(unsigned long long n) {
Inspector inspect("factorial", __FILE__, __LINE__);
inspect.parameter("n", n);
if (n < 2) {
return inspect.result(1);
}
return inspect.result(n * fact(n-1));
}
当然,您可以编写宏来声明检查器并检查参数。如果您正在使用支持变量参数列表宏的编译器,那么您可以得到如下结果:
unsigned long long
factorial(unsigned long long n) {
INJECT_INSPECTOR(n);
if (n < 2) {
return INSPECT_RETURN(1);
}
return INSPECT_RETURN(n * fact(n-1));
}
我不确定您是否可以在不使用AOP环境或某些自定义代码生成工具的情况下获得更清晰的解决方案。
答案 4 :(得分:1)
如果您的方法都是virtual
,那么您可以使用decorator-pattern以非常优雅的方式实现这一目标。
编辑:从上面的评论(你想要输出统计数据)我得出结论,你绝对应该使用装饰模式。它适用于这种东西。
答案 5 :(得分:0)
我只使用日志库(或某些宏)并插入手动日志记录调用。除非你的类有过多的方法,否则开发和调试更复杂的解决方案可能会更快。