मैं एक इनलाइन variadic समारोह inline int foo(...)
मैं foo()
जरूरत है एक मैक्रो कॉल करनी होगी, जो भी variadic है (यह MACRO
कॉल)।
मूल रूप से मुझे अपने सभी इनपुट पैरामीटर MACRO
पर पास करने के लिए foo()
की आवश्यकता है। foo()
को फिर से परिभाषित करना एक और मैक्रो __VA_ARGS__
विकल्प के कारण एक आसान समाधान होगा, लेकिन मुझे मूल्य वापस करने के लिए foo()
की भी आवश्यकता है।
नोट: मैं पहले से लिखित कोड के दो हिस्सों को इंटरफेस करने की कोशिश कर रहा हूं और मुझे उन्हें बदलने की अनुमति नहीं है। कोड के पहले भाग में foo(...)
का उपयोग किया जाता है और MACRO
दूसरे भाग में परिभाषित किया गया है। केवल एक चीज जो मुझे करना है, foo()
को परिभाषित करना है जो MACRO
का उपयोग करता है और मैं नहीं कर सकता क्योंकि वे दोनों भिन्न हैं।variadic फ़ंक्शन को कॉल एक variadic मैक्रो
उत्तर
जो आप पूछ रहे हैं वह असंभव है।
एक चरम कार्य के तर्क रनटाइम पर निर्धारित किए जाते हैं, लेकिन एक मैक्रो संकलन समय पर फैलता है।
असंभव? यह सी ++ है। – Yakk
@Yakk यह __is__ असंभव है। फिर से अपना प्रश्न पढ़ें। 'foo' को एक मैक्रो नहीं, एक समारोह होना चाहिए। – orlp
"क्योंकि 'foo' को एक मान वापस करना होगा।" हमें केवल एक मैक्रो है जो एक मूल्य देता है! मंगल सोलिस्टिस पर बलिदान 3 कुंवारी बकरियां और सुबह में मुझे बुलाओ। या, आप जानते हैं, सी ++ कोड के साथ घृणित बुलाओ। या तो काम करता है। – Yakk
foo
एक मैक्रो बनाएं जिसमें एक लैम्बडा होता है जो मान देता है, और फिर उस लैम्ब्डा को आमंत्रित करता है।
#define foo(...) \
[&](auto&&...args){ \
/* do something with args, or __VA_ARGS__ */ \
MACRO(__VA_ARGS__); \
return 7; \
}(__VA_ARGS__)
अब int x = foo(a, b, c);
दोनों foo
अंदर लैम्ब्डा फोन करेगा, और कहा कि लैम्ब्डा के अंदर (a, b, c)
पर मैक्रो कहते हैं, और एक मूल्य लौट सकते हैं।
मुझे दया है जो आपके कोड को आगे रखता है।
बेहद आतंक से बाहर निकला। – Quentin
ध्यान दें कि 'तर्क ...' और '__VA_ARGS__' 'foo (arg1, (अतिरिक्त, कोष्ठक, चारों ओर, अल्पविराम, ऑपरेटर, arg2)) के मामलों में भिन्न हो सकते हैं;' या सरल' foo (function_with_side_effect()) '। – Jarod42
@ जारोड 42 हां! 'ऑटो और& .... args' और' (__VA_ARGS __) 'वैकल्पिक है, और अप्रत्याशित साइड इफेक्ट्स का कारण बन सकता है। फिर भी, यह आपको तर्कों के साथ-साथ टोकन के रूप में तर्क देता है, जो मुझे लगता है कि ओपी क्या चाहता था। – Yakk
- 1. variadic variadic टेम्पलेट टेम्पलेट्स
- 2. कैसे एक variadic पैक
- 3. कैसे एक variadic समारोह
- 4. एक variadic टेम्पलेट समारोह
- 5. समस्या एक variadic समारोह
- 6. variadic समारोह
- 7. variadic विस्तार
- 8. सी ++ 11 variadic std :: फ़ंक्शन पैरामीटर
- 9. एक variadic is_same कैसे बनाएं?
- 10. variadic टेम्पलेट्स - अधूरा प्रकार
- 11. variadic टेम्पलेट उपनाम
- 12. variadic डिफ़ॉल्ट टेम्पलेट तर्क
- 13. variadic सहायक समारोह
- 14. जावा variadic समारोह पैरामीटर
- 15. variadic टेम्पलेट निर्माता प्राथमिकता
- 16. जेनेरिक variadic मापदंडों
- 17. रिकर्सिव variadic समारोह टेम्पलेट
- 18. variadic टेम्पलेट्स और नई
- 19. variadic टेम्पलेट्स तर्क
- 20. टाइपप्रति: variadic कार्यों
- 21. variadic समारोह टेम्पलेट
- 22. variadic टेम्पलेट्स प्रकार कटौती
- 23. variadic कार्य (तर्क के बिना!)
- 24. Initialzing और एक variadic वर्ग टेम्पलेट
- 25. एकाधिक वंशानुक्रम और variadic टेम्पलेट्स
- 26. C++ variadic टेम्पलेट तर्क पुनरावृत्ति
- 27. कटौती गाइड और variadic टेम्पलेट्स
- 28. अजीब व्यवहार जब रिकर्सिवली variadic कार्यों
- 29. std कर सकते हैं :: समारोह variadic तर्क
- 30. पास स्ट्रिंग टुकड़ा खाली इंटरफ़ेस पैरामीटर variadic को
क्या आप इलिप्सिस के बजाय 'foo' के लिए विविध टेम्पलेट का उपयोग कर सकते हैं? – Jarod42
क्या आप varargs या variadic फ़ंक्शन टेम्पलेट्स के बारे में बात कर रहे हैं? एक के साथ आपकी समस्या हल हो सकती है, दूसरे के साथ यह नहीं कर सकता है। – Quentin
नहीं किया जा सकता है। फ़ंक्शन पैरामीटर रन-टाइम पर सेट होते हैं, संकलन से पहले मैक्रोज़ का विस्तार किया जाता है। मैं इस गड़बड़ को फेंक दूंगा और जो भी करने की कोशिश कर रहा है उसे करने का एक समझदार तरीका समझूंगा। –