में फ़ंक्शन पॉइंटर की रिकर्सिव घोषणा, मैं एक ऐसा फ़ंक्शन घोषित करना चाहता हूं जो एक ही प्रकार के फ़ंक्शन पर पॉइंटर लौटाता हो।सी
मैं इसे उपयोग करने के लिए नीचे दिए गए एक तरह राज्य मशीनों को लागू करना चाहते हैं:
typedef event_handler_t (*event_handler_t)(event_t*); // compilation error
event_handler_t state2(event_t* e);
event_handler_t state1(event_t* e) {
switch(e->type) {
//...
case SOME_EVENT:
return state2;
//...
}
}
event_handler_t state2(event_t* e) {
switch(e->type) {
//...
case OTHER_EVENT:
return state1;
//...
}
}
//...
event_handler_t event_handler;
//...
event_handler(&e);
//...
मैं संरचनाओं का उपयोग कर के रूप में इस compliation त्रुटि को हल करने के लिए प्रबंधन:
typedef struct event_handler {
struct event_handler (*func)(event_t *);
} event_handler_t;
लेकिन इस वापसी बनाता है स्टेटमेंट अधिक जटिल:
event_handler_t state2(event_t* e) {
{
event_handler_t next_handler = {NULL};
switch(e->type) {
//...
case OTHER_EVENT:
next_handler.func = state1;
break;
//...
}
return next_handler;
}
मुझे आश्चर्य है कि क्या बनाने का एक बेहतर तरीका है सी में ऐसे फ़ंक्शन पॉइंटर्स।
यह भी देखें: [SO 816356] (http://stackoverflow.com/questions/816356/how-can-i-typedef-a-function-pointer-that-takes-a- कार्यक्षमता-of-its-own -प्रकार-ए-ए) –