SORU
19 ŞUBAT 2010, Cuma


C geri arama işlevleri

C , ne zaman ve nasıl bir geri arama işlevini kullanıyor musunuz?

DÜZENLEME:
Geri arama fonksiyonu yazmak için basit bir örnek görmek isterim.

CEVAP
19 ŞUBAT 2010, Cuma


Ayrıca geri aramalar yapmak C yolu vardır: fonksiyon işaretçiler

//Define a type for the callback signature,
//it is not necessary, but makes life easier

//Function pointer called CallbackType that takes a float
//and returns an int
typedef int (*CallbackType)(float);  


void DoWork(CallbackType callback)
{
  float variable = 0.0f;

  //Do calculations

  //Call the callback with the variable, and retrieve the
  //result
  int result = callback(variable);

  //Do something with the result
}

int SomeCallback(float variable)
{
  int result;

  //Interpret variable

  return result;
}

int main(int argc, char ** argv)
{
  //Pass in SomeCallback to the DoWork
  DoWork(&SomeCallback);
}

Şimdi ise geri aramalar sınıf yöntemleri geçirmek isterseniz, bu işlev işaretçileri için bildirimleri daha karmaşık tanımlamalar, örnek:

//Declaration:
typedef int (ClassName::*CallbackType)(float);

//This method performs work using an object instance
void DoWorkObject(CallbackType callback)
{
  //Class instance to invoke it through
  ClassName objectInstance;

  //Invocation
  int result = (objectInstance.*callback)(1.0f);
}

//This method performs work using an object pointer
void DoWorkPointer(CallbackType callback)
{
  //Class pointer to invoke it through
  ClassName * pointerInstance;

  //Invocation
  int result = (pointerInstance->*callback)(1.0f);
}

int main(int argc, char ** argv)
{
  //Pass in SomeCallback to the DoWork
  DoWorkObject(&ClassName::Method);
  DoWorkPointer(&ClassName::Method);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Nesson

    Charles Ness

    27 NİSAN 2006
  • fireflame65

    fireflame65

    27 Mart 2007
  • Visual Life

    Visual Life

    3 Temmuz 2006