有一个宏
#define TEST printf("%p", this)
当您从常规方法调用它时 - 没问题
void CMyClass::Test() {
TEST;
}
但是当你从静态方法调用它时
static void CMyClass::TestStatic() {
TEST;
}
this
您会收到一个错误,即未定义id 。这是合乎逻辑的。
问题:是否有可能以某种方式确定我们在一个静态函数中,并据此做出使用代码的决定?那些。像这样的东西
#define TEST \
#if declared(this) \
printf("%p", this) \
#else \
printf("%p", nullptr) \
#endif
或者
#define TEST \
if constexp (is_declared(this) \
printf("%p", this); \
else \
printf("%p", nullptr)
宏用于记录通话
如果您愿意,您可以设法确定代码块是在静态函数还是非静态函数内部,例如:
在线编译器
但是
this
还是不行,因为这个关键字不能出现在静态函数中,这样的情况会导致if constexpr
. 一般来说,宏是邪恶的。做正常的功能。