可以在某些全局头文件中或更佳地将其定义为编译器命令行参数:
#define me (*this)
还有一些用法示例:
some_header.h:
inline void Update()
{
/* ... */
}
main.cpp:
#include "some_header.h"
class A {
public:
void SetX(int x)
{
me.x = x;
me.Update();
}
void SomeOtherFunction()
{
::Update();
}
/*
100 or more lines
...
*/
void Update()
{
// ...
}
int x;
};
因此,在类方法中,当我访问类成员时,我总是使用me
,而在访问全局标识符时,我总是使用::
。这为读者提供了对代码不熟悉的信息(可能是几个月后的我自己),无需访问其他地方即可获得所访问内容的本地化信息。我想进行定义,me
因为我发现this->
到处使用都过于嘈杂和丑陋。但是可以#define me (*this)
认为是C ++的良好实践吗?me
宏是否存在一些实用的问题点?而且,如果您作为C ++程序员将是使用该me
宏的某些代码的读者,您是否愿意?
编辑:因为很多人争论不具体反对使用me
,而是一般反对明确这一点。我认为可能尚不清楚“在任何地方都可以利用”的好处。
“到处都利用”的好处是什么?
- 作为代码阅读者,您可以确定所访问的内容,并且可以专心于不同的事情,而不必验证-在某些遥远的代码中-确实可以访问您认为可以访问的内容。
- 您可以更具体地使用搜索功能。搜索“
this->x
”可以为您提供更多搜索结果,而不是仅搜索“x
” - 当您删除或重命名某些成员时,编译器会在使用该成员的位置可靠地通知您。(某些全局函数可以具有相同的名称,并且如果不使用显式的函数,可能会引入错误)。
- 当您重构代码并从成员中明确非成员函数(以更好地封装)时,这会显示您必须编辑的位置,并且可以轻松地将其替换为指向作为非成员函数参数给出的类的实例的指针
- 通常,当您更改代码时,不使用显式this的错误可能性要比在各处使用显式this的可能性更大。
- 当您从外部(
object.member
vsobject.m_member
)访问成员时,显式此方法比显式的“ m_”要少(多谢@Kaz指出这一点) - 明确地说,这解决了所有成员(属性和方法)的普遍性问题,而“ m_”或其他前缀实际上仅可用于属性。
我想完善和扩展此列表,告诉我您是否了解其他优势,并在所有地方都明确使用此示例。
#define self (*this)
呢?您甚至可以混合使用两个宏,并拥有一些模仿VB的文件和其他模仿Python的文件。:)
me_x
。