3

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

我的目标是编写一个通用宏,用于记录,根据上下文使用“this”(例如,用于打印“this”的值)。

4

2 回答 2

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; }成员函数,你可以做一个非常丑陋的事情。这会给你一个返回NULLor的函数this。依靠未定义的行为,您必须希望this指针在没有成员变量的基类中不会被修改。

于 2013-01-11T23:05:39.230 回答
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

于 2013-01-11T23:18:50.550 回答