Bu makro bazı genel üstbilgilerde veya daha iyisi bir derleyici komut satırı parametresi olarak tanımlanabilir:
#define me (*this)
Ve bazı kullanım örnekleri:
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;
};
Bir sınıf üyesine eriştiğimde bir sınıf yönteminde her zaman kullanıyorum me
ve her zaman kullandığım bir genel tanımlayıcıya erişiyorum ::
. Bu, kodu tanımayan okuyucuya (muhtemelen birkaç ay sonra kendim) başka bir yere bakmaya gerek kalmadan erişilenlere ilişkin yerelleştirilmiş bilgiler verir. Ben tanımlamak istiyorum me
çünkü this->
her yerde çok gürültülü ve çirkin kullanarak bulmak . Ancak #define me (*this)
iyi bir C ++ uygulaması olarak düşünülebilir mi? me
Makro ile ilgili bazı pratik sorunlu noktalar var mı? Ve eğer C ++ programcısı olarak me
makro kullanarak bazı kodların okuyucu olacak , ister misiniz ister misiniz?
Düzenleme: Çünkü birçok kişi me
açıkça kullanarak tam tersi değil , ama genellikle açık tam aksine. Bence "bu her yerde açık" ne faydaları net olmayabilir.
"Bunu her yerde açıkça" yapmanın faydaları nelerdir?
- Kodun bir okuyucusu olarak neye erişildiğine dair kesinliğe sahipsiniz ve eriştiğinizi düşündüğünüze gerçekten erişilen, bazı uzak kodlarda doğrulamadan farklı şeylere konsantre olabilirsiniz.
- Arama işlevini daha spesifik olarak kullanabilirsiniz. "
this->x
" Araması , size yalnızca "x
" aramasından daha fazla aranan sonuçlar verebilir - Bir üyeyi sildiğinizde veya yeniden adlandırdığınızda, derleyici bu üyenin kullanıldığı yerlerde size güvenilir bir şekilde bildirim gönderir. (Bazı global işlevler aynı ada sahip olabilir ve açık bir şekilde kullanmıyorsanız hata sunabilirsiniz.
- Kodu yeniden düzenlerken ve üyeden üye olmayan bir işlev yaptığınızda (daha iyi kapsülleme yapmak için) açık bir şekilde bu, düzenlemeniz gereken yeri gösterir ve bunu üye olmayan işlev parametresi olarak verilen sınıf örneğine kolayca işaretçiyle değiştirebilirsiniz.
- Genellikle kodu değiştirirken, bunu açıkça kullanmadığınızda, bunu her yerde açıkça kullandığınızdan daha fazla olasılık vardır.
- Açıkça dışarıdan üye (
object.member
vsobject.m_member
) atarken açık "m_" den daha az gürültülü (bu noktayı tespit etmek için @Kaz sayesinde) - Bu açıkça tüm üyeler - öznitelikler ve yöntemler için evrensel olarak sorunu çözerken, “m_” veya diğer önek pratik olarak yalnızca öznitelikler için kullanılabilir.
Bu listeyi cilalamak ve genişletmek, diğer avantajları biliyor musunuz ve bunu her yerde açıklamak için vakalar kullanmak istiyorsanız bana bildirin .
#define self (*this)
? Hatta her iki makroyu karıştırabilir ve VB ve diğer Python'u taklit eden bazı dosyalara sahip olabilirsiniz. :)
me_x
.