有没有办法确定上下文是否允许使用"this"?
Is there some way to determine whether the context allows the use of "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
或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
宏中的标志。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 在noexcept 规范中是否允许使用"this"?
- 整体模板参数。错误:在常量表达式中使用'this'
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 删除指针后阻止对象使用 "this"
- 我遇到了一些C++代码.为什么我们必须在块中使用 *this 而不是这个
- 何时使用'this'访问自己的成员
- 有没有办法强制对 clang-format/clang-tidy 中的类成员/方法使用 "this->"?
- 在模板类中使用"this"会导致参数初始化错误
- 使用 'this' 作为指向 CRTP 基类中派生类的指针
- 在普通 C 中使用 'this' 关键字
- 使用'this->'成员变量访问的性能
- GCC:当层次结构中存在虚拟继承时,C++11 内联对象初始化(使用 "this")不起作用
- 'this'问题不大(在非成员函数中无效使用'this')
- 在类定义中使用'this'
- Qt对象如果使用'this'创建(更新)需要删除或自动删除?
- 使用"this"指针初始化 std::array
- C++使用*this从静态方法调用一个抽象方法
- 我应该使用 "this" 关键字从成员函数内部访问类成员吗?
- 使用 "this" 关键字时的"Error: expression must have a pointer type"