这个问题用编程的方法解决起来比较困难,可以采用(编程+代码后处理脚本)来提供一个稍微简单点的实现.举例对Cpp的函数调用日志来进行处理.
首先,我们要确保参数都可以用统一的方法来处理,譬如cpp里全部使用<
typedef struct tag_xxx
{
double a;
int b;
char c;
friend std::ostream& operator<
{
os<
return os;
}
}xxx;
这样对于任何参数定义(无论是double等基础类型还是结构体,class)都可以用<
之后对于任何参数的调用,可以用以下方法打印信息
int test(double a,int b,char c,xxx obj)
{
cout<<__func__>"<
/**
函数体
**/
return 0;
}
上面的输出有个问题就是如何实现自动化,可以采用Perl脚本等方式:
假设有函数,在函数体需要插入log的地方置flag:
int test(double a,int b,char c,xxx obj)
{
//InsertLog
}
对于脚本来讲,可以判断到test函数,然后使用正则表达式等得到参数列表"a,b,c,obj".
然后脚本查找到函数体内的//Insertlog标志,根据得到的参数列表生成字符串
cout<<_func_>"<
插入到代码中.
当然,对于class及struct等聚合类也可以采用置flag然后用脚本生成"<