referans kabul etmesi State_ döndürür. State_
, State
üyesine sahip ve örtülü olarak State
'a dönüştürülebilen bir sarmalayıcı sınıftır.
State_
sarıcısına neden ihtiyaç duyulmasının nedeni, aynı türde bir işlev için bir işaretçi döndüren bir işlevi ifade etmenin bir yolu olmadığından ötürüdür. Sargı, öz referanstan kurtulur. çizgi ile
Hattı:
struct StateData;
bir sınıf StateData
bir ileri beyanı.
struct State_;
bir sınıf State_
bir ileriye doğru bildirimi.
typedef State_ (*State)(StateData&);
Bu biraz zor. Bir State_
döndüren ve bir argüman olarak bir StateData&
alır bir işlev işaretçisi için bir işlev işaretçisi için bir tür diğer adı olarak State
tanımlar. Snippet'in sonunda bildirilen işlevler, bu tür bir işlev işaretçisi tarafından işaret edilebilir.
Benim düşünceme göre, seçilen ad zaten State_
sınıfı olduğunu göz önünde bulundurarak çok kafa karıştırıcı. Ben Macar notasyonu karşı genelde olduğum sürece, ben her zaman bir işlev işaretçisi belirtmek için bir sonek veya önek uygulamak öneriyoruz, state_fun
veya state_handler
veya state_callback
,
struct State_
{
Bu State_
calss tanımını başladığını düşünelim.
State_(State pp) : p(pp) { }
Bu, sınıf için bir kurucu tanımlar. Argüman, daha önce tanımlanan işlev işaretçi tipindedir. Kısa süre içinde ilan edilecek üyeyi başlatır.
operator State()
{
return p;
}
Bir üye işlevi. Daha spesifik olarak, bir kullanıcı tanımlı işaretçi türüne dönüştürebilir.
State p;
yapıcıda başlatıldı elemanı bildirir. Bir
State
tarafından işaret edilebilir
};
State_ state_start(StateData& d);
State_ state_selecting(StateData& d);
State_ state_initializing(StateData& d);
State_ state_tracking(StateData& d);
Ücretsiz işlevleri. İşaretçi işlevini tanımlarken, typedef yardımcı olur.
Cevabınız için teşekkür ederim, ancak "operatör" işlevini anlamıyorum. Daha fazlasını açıklayabilir misin? @ user2079303 –
@ AnitaW.Smith ne anlama geliyor? Kullanıcı tanımlı dönüşümleri incelediniz mi? – user2079303
Daha önce hiç duymadım. Onu arayacağım. Bu dava için açıklanması kolaysa, bana ne yaptığını kısaca söyleyebilir misiniz? @ user2079303 –