संभव डुप्लिकेट:
Should templated functions take lambda arguments by value or by rvalue reference?मूल्य से या सी ++ 11 यूनिवर्सल संदर्भ द्वारा म्यूटर्स पास करें?
सी ++ मानक पुस्तकालय कार्यों इसलिए की तरह, मूल्य द्वारा functor (समारोह सूचक या समारोह वस्तु) तर्क ले:
template <typename F>
void apply(F func)
{
func();
}
.. लेकिन क्या Universal Reference द्वारा मकान मालिकों को पारित करना बेहतर नहीं होगा? इसलिए जैसा:
template <typename F>
void apply(F&& func)
{
func();
}
इस तरह आप समारोह वस्तुओं है कि राज्य को बनाए रखने के गुजर सकता है, और उच्च क्रम समारोह के बाद वापस आ गया है कि (संभवतः संशोधित) राज्य की पहुंच है।
टेम्पलेट्स संकलित समय पर विस्तार/हल किए गए हैं। संकलन समय पर वे राज्य के बारे में कैसे जान सकते हैं? –
ध्यान दें कि पहली बार आप प्रतिलिपि से बचने के लिए संदर्भ-रैपर का उपयोग कर सकते हैं। –
@Manoj R: मेरा मतलब था: आपके पास फ़ंक्शन ऑब्जेक्ट वेरिएबल fn_obj है, आप लागू (fn_obj) पर कॉल करते हैं, और फिर आपके पास fn_obj.state तक पहुंच है, जिसे लागू करने के लिए कॉल द्वारा संशोधित किया गया हो सकता है – TommiT