2009-05-03 4 views
10

उदाहरण: एक फ़ंक्शन जो फ़ंक्शन लेता है (जो एक फ़ंक्शन (वह ...) और एक int लेता है) और एक int।मैं फ़ंक्शन पॉइंटर को टाइप कैसे कर सकता हूं जो तर्क के रूप में अपने स्वयं के प्रकार का कार्य करता है?

typedef void(*Func)(void (*)(void (*)(...), int), int); 

यह रिकर्सिवली विस्फोट जहां (...)। क्या कोई मौलिक कारण यह नहीं किया जा सकता है या कोई और वाक्यविन्यास है? ऐसा लगता है कि यह एक कलाकार के बिना संभव होना चाहिए। मैं वास्तव में एक प्रेषण-टेबल पास करने की कोशिश कर रहा हूं लेकिन मैं इसे समझ सकता हूं कि अगर मैं इसे एक ही प्रकार से पास कर सकता हूं।

+0

क्या यह रिकर्सिव रूप से विस्फोट करता है, या यह वास्तव में पिछले तर्क को निर्दिष्ट किए बिना "..." को एक vararg के रूप में व्याख्या करता है जहां vararg बिंदु से शुरू होना चाहिए? –

+0

मुझे पता है कि मैंने लगभग इस तरह एक SO सवाल देखा है, लेकिन मुझे यह नहीं मिल रहा है। –

+0

http://stackoverflow.com/q/793449/10396 – AShelly

उत्तर

10

आप एक struct में समारोह सूचक लपेट कर सकते हैं:

struct fnptr_struct; 
typedef void (*fnptr)(struct fnptr_struct *); 
struct fnptr_struct { 
    fnptr fp; 
}; 

मुझे यकीन है कि नहीं कर रहा हूँ अगर यह कास्टिंग पर एक सुधार है। मुझे संदेह है कि संरचना के बिना यह असंभव है क्योंकि सी को उपयोग किए जाने से पहले परिभाषित करने की आवश्यकता होती है और टाइपपीफ के लिए कोई अपारदर्शी वाक्यविन्यास नहीं होता है।

+0

अच्छा है कि एक कामकाज है, दुख है कि यह "बस काम नहीं करता"। आह, विरासत। : - / – HostileFork

6

सीधे करना असंभव है। आपके एकमात्र विकल्प फ़ंक्शन पॉइंटर तर्क को अनिर्दिष्ट तर्क स्वीकार करने के लिए, या Dave suggested के रूप में फ़ंक्शन पॉइंटर युक्त संरचना में पॉइंटर स्वीकार करने के लिए हैं।

// Define fnptr as a pointer to a function returning void, and which takes one 
// argument of type 'pointer to a function returning void and taking 
// an unspecified number of parameters of unspecified types' 
typedef void (*fnptr)(void (*)()); 
संबंधित मुद्दे

 संबंधित मुद्दे