有没有办法确定上下文是否允许使用“this”?
我的目标是编写一个通用宏,用于记录,根据上下文使用“this”(例如,用于打印“this”的值)。
有没有办法确定上下文是否允许使用“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; }
成员函数,你可以做一个非常丑陋的事情。这会给你一个返回NULL
or的函数this
。依靠未定义的行为,您必须希望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
。