有没有办法确定上下文是否允许使用“this”?
我的目标是编写一个通用宏,用于记录,根据上下文使用“this”(例如,打印“this”的值)。
答案 0 :(得分:2)
即使您可以这样做,也永远不会使用它。代码必须是合法的,即使它永远不会被调用,在这样的上下文中提及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
或this
的函数。你必须希望,依赖于未定义的行为,this
指针将在没有成员变量的基类中被修改。
答案 1 :(得分:1)
如果您能够为调试目的定义基类,则定义全局和类成员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
宏中的标记。