C++能实现 java 注解自动在函数入口和出口打 log 的功能么?
1
inoki 2018-08-20 22:35:09 +08:00 via Android
任意参数的函数对象
|
2
changnet 2018-08-20 22:56:40 +08:00 via Android
一般是利用对象的构造和析构函数打印,然后封装成一个宏,在函数入口处调用。
其他方式没见过,也不了解 java 的注解自动打印是什么样子的 |
3
mmdsun 2018-08-20 23:25:29 +08:00 via Android
不太了 c++解。c#支持 Attribute。相当于 Java 注解
|
4
gnaggnoyil 2018-08-20 23:31:31 +08:00
GCC 有`-finstrument-functions`可以用来挂钩子,配合 libdl 可以做 symbol translation 和 demangle.
其它 implementation 不清楚,不过无论如何这种需求都需要严重依赖于具体的 implementation,如果要在语言层面上正式直接实现这个需求,static reflection 加入标准之前想都别想 |
5
chengluyu 2018-08-20 23:35:03 +08:00 1
class AutoLogger {
const char *funcName_; public: AutoLogger(const char *funcName) : funcName_{ funcName } { puts(funcName_); } ~AutoLogger() { puts(funcName_); } } 然后定义一个宏,用 __func__ 初始化 AutoLogger: #define AUTO_LOGGER AutoLogger __you_will_never_use_this_name(__func__); 在要记录的函数开头加上 AUTO_LOGGER 就行了。 |
6
GeruzoniAnsasu 2018-08-21 00:24:11 +08:00 via Android
RAII 了解一下
类似 go 的 defer |
7
MeteorCat 2018-08-21 01:37:43 +08:00 via Android
看堆栈不就行了吗?
|