के साथ एक एसोसिएटिव * फ़ंक्शन को कॉल करना * सहयोगी Arrays के साथ कुछ भी करने के साथ भ्रमित नहीं होना चाहिए।सी मैक्रोज़
मुझे पता है कि गणित के मानचित्र (या लागू) कार्यक्षमता के समान परिणाम देने के लिए मैक्रोज़ के साथ सी में फ़ंक्शन को सदिश कैसे करें। अर्थात् तर्कों की सूची में एक फ़ंक्शन लागू करें।
#define Apply(type, function, ...) \
{ \
void *Stop = (int[]){0}; \
type **List = (type*[]){__VA_ARGS__, Stop}; \
for(int i = 0; List[i] != Stop; ++i) \
function(List[i]); \
}
मैं तो मुझे लगता है कि ऊपर नहीं किया
#define FreeAllAtOnce(...) Apply(void, free, __VA_ARGS__);
जो प्रभाव पड़ता है की तरह कुछ है कि
free(Array1);
free(Array2);
free(Array3);
FreeAllAtOnce(Array1, Array2, Array3);
के बराबर है क्या कर सकते हैं, मैंने इसे एक किताब में पढ़ा और इसका इस्तेमाल किया एच तब से ईमानदारी से।
मेरा प्रश्न है: क्या मैं कुछ बाइनरी फ़ंक्शन के माध्यम से एक सरणी को जोड़कर जोड़ सकता हूं। उदाहरण के लिए जीसीडी समारोह ले लो। मैं चाहता हूँ की तरह एक समारोह:
GCD_all(a, b, c, d, e);
तर्क के किसी भी संख्या के लिए के रूप में
GCD(GCD(GCD(GCD(a, b), c), d), e);
एक ही प्रभाव पड़ता है।
मैंने ऐसा करने की कोशिश की है और इसे ठीक से काम करने में सक्षम नहीं है। मुझे उस मामले में भी रूचि है जहां समारोह में अतिरिक्त पैरामीटर पास किए जा सकते हैं। कि मैं एक समारोह
Atype BinaryCombineAll(Atype a, Atype b, Atype c, Atype d, OtherType z, OtherType y)
मुझे आशा है कि समझ में आता है है
Atype BinaryCombine(Atype a, Atype b, OtherType z, OtherType y)
तो
: सर्वाधिक सामान्य अर्थ में मैं जैसे कार्यों के साथ ऐसा करने के लिए देख रहा हूँ। किसी भी विचार या मदद की बहुत सराहना की जाएगी!
धन्यवाद।
मुझे लगता है कि आपको सी ++ 11 वैरिएडिक टेम्पलेट्स – ForceBru
बीटीडब्ल्यू के साथ कुछ सफलता मिली हो सकती है, आप कैसे पहचान रहे हैं कि 'फ़ंक्शन' कितने तर्क ले सकते हैं? – ForceBru
@ForceBru, मुझे सी के भीतर रहने में दिलचस्पी है। मेरे पहले उदाहरण समारोह में केवल एक तर्क होता है। मैं जो पूछ रहा हूं वो वह है जो दो (या अधिक) लेता है। – amcalde