PDA

View Full Version : اجرای توابع توسط آدرس آنها



saleh.hi.62
یک شنبه 16 خرداد 1389, 22:01 عصر
اجرای توابع توسط آدرس آنها چه سودی برای ما داره؟ و کجا میتونه کاربردی باشه؟

مثل این مثال:


int(* p)(const char*, const char*);
p = strcmp

pashaie
یک شنبه 16 خرداد 1389, 22:56 عصر
اجرای توابع توسط آدرس آنها چه سودی برای ما داره؟ و کجا میتونه کاربردی باشه؟

خیلی جاها لازم و حتی حیاتیه!
به عنوان مثال تو نوشتن آسنکرون، شما یه تابع آسنکرون رو با آدرس یه تابعی کال می کنی و بعد بدون منتظر موندن ادامه کدت رو ران می کنی، حالا وقتی که تابع آسنکرون نظر کارش تموم شد، میاد تابع مورد نظر شما رو فراخونی می کنه.
یا مثلا همین ایونت های که تو برنامه نویسی GUI می سازیم (مثلا کلیک کردن یه دکمه) از طریق همین روشا اجرا می شن.

یه مورد دیگه هم اینه که مثلا شما می خوای یه تابع مرتب سازی همه منظوره واسه هر نوعی بنویسی. کاری که میکنی اینه که یه پارامتر از نوع تابع هم واسه تابع تعریف می کنی که اون تابع وظیفش مقایسه کردن اون نوع هاست.
البته بیشتر کارای که تو c با متغییر تابعی انجام می دادن رو الان می شه با کلاس ها و virtual function ها انجام داد.
البته این به این معنی نیست که تو زبان های شی گرا امروزی از این چیزا نداریم! مثلا تو زبان C# ما Delegates ها رو داریم و همچنین عبارات Lambdas که کار کردن با Delegates رو خیلی راحت می کنه