क्या कक्षा के प्रतिलिपि बनाने के लिए सदस्य फ़ंक्शन पॉइंटर प्राप्त करने का कोई तरीका है? मुझे पता है कि एक सामान्य सदस्य फ़ंक्शन पॉइंटर को कैसे परिभाषित और उपयोग करना है, लेकिन मुझे इसे प्राप्त करने का कोई तरीका पता नहीं लग रहा है।मैं कक्षा के कॉपी कन्स्ट्रक्टर को सदस्य फ़ंक्शन पॉइंटर कैसे प्राप्त कर सकता हूं?
उत्तर
सी ++ मानक के अनुसार, "एक कन्स्ट्रक्टर का पता नहीं लिया जाएगा," इसलिए आप जो भी पूछ रहे हैं वह करना संभव नहीं है। हालांकि, एक सरल कामकाज है। नीचे दिया गया कोड फ़ंक्शन पॉइंटर को उस फ़ंक्शन पर देता है जो उसके इनपुट की एक प्रति बनाता है।
template<class obj> auto GetCopyConstructor() -> obj(*)(const obj&)
{
return +[](const obj& o) { return obj(o); };
}
struct foo
{
std::string msg;
foo(const std::string& my_msg) { msg = my_msg; }
foo(const foo&) = default;
};
int main()
{
auto make_copy = GetCopyConstructor<foo>();
foo a("Hello, world");
foo b = make_copy(a);
std::cout << b.msg << std::endl;
}
वैकल्पिक रूप से: (ए सरलीकरण कि भी अतिरिक्त उपयोग के मामलों को शामिल किया गया)
template<class obj> obj Copy(const obj& o) { return obj(o); }
template<class obj> obj* CopyNew(const obj& o) { return new obj(o); }
template<class obj> obj CopyFromPtr(const obj* o) { return obj(*o); }
template<class obj> obj* CopyNewFromPtr(const obj* o) { return new obj(*o); }
template<class obj> void* WhyWouldYouEvenWantToDoThis(const void* o)
{ return new obj(*(obj*)o); }
int main()
{
foo(*make_copy)(const foo&) = Copy<foo>;
foo a("Hello, world");
foo b = make_copy(a);
std::cout << b.msg << std::endl;
}
केवल गायब रेखाएं # शामिल हैं
[कभी भी दिमाग] (http://stackoverflow.com/questions/18889028/a-positive-lambda-what-sorcery-is-this)। आज कुछ नया सीख लिया। – StoryTeller
+ आवश्यक नहीं होना चाहिए, यह सुनिश्चित नहीं है कि यह क्यों है? इसे बिना किसी ठीक रूपांतरण पर एक निहित रूपांतरण ट्रिगर करना चाहिए। –
- 1. सदस्य फ़ंक्शन के लिए फ़ंक्शन पॉइंटर
- 2. मैं संरचना में फ़ंक्शन पॉइंटर कैसे स्टोर कर सकता हूं?
- 3. कास्टिंग सदस्य फ़ंक्शन पॉइंटर
- 4. सी ++ सदस्य फ़ंक्शन पॉइंटर समस्या
- 5. कक्षा के सदस्य फ़ंक्शन
- 6. क्या सदस्य फ़ंक्शन किसी सदस्य सदस्य को गैर-कॉन्स्ट पॉइंटर वापस कर सकता है?
- 7. मैं एक कॉन्स्ट विधि से गैर-कॉन्स्ट सदस्य फ़ंक्शन पॉइंटर क्यों कॉल कर सकता हूं?
- 8. फ़ंक्शन पैरामीटर: कॉपी या पॉइंटर?
- 9. किसी सदस्य फ़ंक्शन को पॉइंटर पास करने के लिए
- 10. टेम्पलेट वर्ग के सदस्य फ़ंक्शन के लिए फ़ंक्शन पॉइंटर? (सी ++)
- 11. क्या मैं एक कॉपी कन्स्ट्रक्टर को स्पष्ट रूप से कॉल कर सकता हूं?
- 12. कन्स्ट्रक्टर में कक्षा के सदस्य सरणी को कैसे प्रारंभ करें?
- 13. सदस्य फ़ंक्शन पॉइंटर के माध्यम से सदस्य फ़ंक्शन को कैसे कॉल करें?
- 14. मैं एक निष्पादन फ़ंक्शन पॉइंटर कैसे बना सकता हूं?
- 15. सी ++ में स्थिर फ़ंक्शन पॉइंटर सदस्य के अनिर्धारित संदर्भ, मैं गलत क्या कर रहा हूं?
- 16. मैं क्लास सदस्य फ़ंक्शन को बांधने के लिए boost :: बाइंड का उपयोग कैसे कर सकता हूं?
- 17. मैं कक्षा सदस्य विधि के साथ cudaStreamAddCallback() का उपयोग कैसे कर सकता हूं?
- 18. मैं पॉइंटर-टू-सदस्य-फ़ंक्शन कैसे कॉल करूं?
- 19. मैं एक स्थिर विधि के भीतर कक्षा के सदस्य चर कैसे कॉल कर सकता हूं?
- 20. क्या मैं कॉपी कन्स्ट्रक्टर को निजी बना सकता हूं और अभी भी डिफ़ॉल्ट कार्यान्वयन
- 21. मैं कॉलिंग फ़ंक्शन में मेमोरी आवंटित कैसे कर सकता हूं (इसे पॉइंटर-पैरामीटर के माध्यम से) वापस कर सकता हूं?
- 22. कन्स्ट्रक्टर को इंगित करने वाले फ़ंक्शन पॉइंटर को कैसे पास किया जाए?
- 23. कॉपी कन्स्ट्रक्टर
- 24. मैं एक ही कक्षा के सदस्य वेक्टर की घोषणा कैसे कर सकता हूं?
- 25. मैं एक कक्षा को "अनसेट" कैसे कर सकता हूं जिसे
- 26. मैं कल के एनएसडीएटी को कैसे प्राप्त कर सकता हूं
- 27. मैं std :: वेक्टर में पहले तत्व को पॉइंटर कैसे प्राप्त कर सकता हूं?
- 28. आप सदस्य फ़ंक्शन पॉइंटर कैसे पास करते हैं?
- 29. मैं .NET में एक स्ट्रीम को कैसे कॉपी (कॉपी) कर सकता हूं?
- 30. वर्ग सदस्य कार्य समस्याओं के लिए फ़ंक्शन पॉइंटर
आप नहीं कर सकते। रचनाकारों के पास नाम नहीं हैं। –
आप जो भी करना चाहते हैं उसके आधार पर आप नहीं कर सकते हैं, तो आप लैम्डा का उपयोग करके एक समाधान ढूंढ सकते हैं। अर्थात। इसे लम्दा में डाल देना – Makaronodentro
यह एक [एक्सवाई समस्या] (http://xyproblem.info/) की तरह लगता है। मान लीजिए कि आप किसी भी तरह से एक निर्माता को पॉइंटर प्राप्त करने में कामयाब रहे (न कि आप कर सकते हैं) - आप इसका उपयोग कैसे करेंगे? आप जिस वास्तविक समस्या को हल करने की कोशिश कर रहे हैं वह क्या है? –