יצירת משתנה מסוג my_custom_func: typedef struct my_custom_func { void *func_address; int numParams; }
|
הצהרה של כמה פונקציות לדוגמה:
void firstFunc (long int param1) {...}; void secondFunc (long int param1, long int param2) {...}; void thirdFunc (long int param1, long int param2, long int param3) {...};
|
מילוי המערך מהטיפוס שהגדרנו למעלה, my_custom_func
my_custom_func funcArray={ {&firstFunc, 1}, {&secondFunc 2}, {&thirdFunc 3} };
|
הקטע קוד שמפעיל את המערך:
{ int i; for (i=0;i<3;i++) { if (funcArray.numParams==1) (*funcArray.funcAddress)(param1); if (funcArray.numParams==2) (*funcArray.funcAddress)(param1,param2); if (funcArray.numParams==3) (*funcArray.funcAddress)(param1,param2,param3); } }
|
לא בדקתי עם קומפיילר יכול להיות שצריך עוד קצת תחמונים אבל זה העיקרון
האמת שאתה יכול אפילו לבדוק, אם למשל תעשה קריאה לפונקציה שמקבלת פרמטר אחד עם 3 פרמטרים זה עלול גם לעבוד
למשל לפונצקיה הראשונה שאמורה לקבל רק פרמטר אחד להריץ את הקריאה הבאה:
(*funcArray.funcAddress)(param1,param2,param3);
|
אם זה עובד בכלל חסכת את כל הלולאה והחיים טובים...