有没有办法确定上下文是否允许使用"this"?

Is there some way to determine whether the context allows the use of "this"?

本文关键字:许使用 this 是否 上下文 有没有      更新时间:2023-10-16

是否有办法确定上下文是否允许使用"this"?

我的目标是编写一个通用的宏,用于日志记录,它取决于上下文使用"this"(例如,用于打印"this"的值)。

即使你能做到这一点,你也永远不能使用它。代码必须是合法的,即使它永远不能被调用,并且在这种上下文中提到this是不合法的。考虑:

if (this_is_legal())
   std::cout << this << std::endl;
else
   std::cout << "not in member function" << std::endl;

好吧,这段代码不会编译,即使神奇的this_is_legal工作。因为第一行std::cout不能在this不合法的上下文中编译。

你可以做一个非常丑陋的const void *getThis() { return NULL; }作为全局函数,const void *getThis() { return this; }作为成员函数。这将给您一个返回NULLthis的函数。依靠未定义行为,您必须希望this指针在没有成员变量的基类中不会被修改。

如果可以为调试目的定义基类,则定义全局函数和类成员debug函数。成员函数可以使用this,而全局函数可以使用其他信息,作用域规则可以选择正确的debug函数。

另一种方法是定义两个宏:
#define ENTER_CLASS_SCOPE
# undef IN_CLASS
# define IN_CLASS 1
#define EXIT_CLASS_SCOPE
# undef IN_CLASS
# define IN_CLASS 0

和初始#define IN_CLASS 0。然后,您可以在定义成员函数的cpp文件的顶部和末尾使用这些宏,并检查DEBUG宏中的标志。