किसी ने पहले ही इस प्रश्न से पूछा है, लेकिन धागा मूल प्रश्न के साथ समाप्त हुआ जिसका जवाब नहीं मिला।टेम्पलेटेड ऑपरेटर() अधिभार सी ++
लगता है कि आप इस है:
template<size_t i, class f_type>
void call_with_i(f_type f);
functor_type या तो है:
एक) एक विधि निम्न हस्ताक्षर है कि के साथ एक struct:
template<size_t i> operator()() const;
या, ख) एक ऐसा फ़ंक्शन जो इस तरह दिखता है:
template<size_t i> foo();
मैं "call_with_i < 42> (foo)" "foo < 42>()" के बराबर होना चाहता हूँ, लेकिन मैं सही वाक्य रचना ऐसा करने के लिए को समझ नहीं सकता। मैं एक समाधान के साथ संतुष्ट होगा जो सिर्फ (ए)
करता है लेकिन (ए) + (बी) महान
होगा। मैं पहले से ही इन वाक्यविन्यास की कोशिश की है:
f<i>(); // doesn't work
f()<i>; // doesn't work
f.operator<i>(); // doesn't work
f.operator()<i>; // doesn't work
f.operator()<i>(); // works on msvc, but doesn't work on gcc.
कैसे आप स्पष्ट टेम्पलेट तर्क के साथ ऑपरेटर() आह्वान करते हैं?
क्या इस तरह से इसे आमंत्रित करने का कोई तरीका है कि एक ही सिंटैक्स एक टेम्पलेटेड फ्री फ़ंक्शन भी कॉल करेगा?
पेज। यदि आप सोच रहे हैं कि मैं इसका उपयोग किसके लिए कर रहा हूं, इसकी वजह यह है कि मैं एक फ़ंक्शन दोहराना लिख रहा हूं, जहां < 10> (f) दोहराता है f (0) तो f (1) ... f (10)। मैं इंडेक्स द्वारा समानांतर में एकाधिक बूस्ट :: फ़्यूज़न वैक्टर के माध्यम से इसे फिर से शुरू करने के लिए उपयोग कर रहा हूं। हाँ, मैं iterators का उपयोग कर सकता था, या मैं सिर्फ नामित सदस्य समारोह का उपयोग कर सकता था, लेकिन मैं अभी भी जवाब जानना चाहता हूँ।
संपादित करें नोट: मैंने सामान को धक्का दिया क्योंकि एक टेम्पलेट मुक्त फ़ंक्शन को एक तर्क के रूप में पास करने से कोई अर्थ नहीं होता है।
इसका उत्तर नहीं दिया गया क्योंकि आप नहीं कर सकते। – GManNickG