मैं सिर्फ पाया अपने आप को एक वर्गक्या मैं इस छोटी विधि कॉल कॉलिंग कक्षा के साथ पहिया को फिर से शुरू कर रहा हूं?
template <typename T> struct invoker {
void operator()(T& it) const {it();}
};
बनाने तो मैं कुछ करने के लिए एक invoker<foo>
(जो मेरे नियंत्रण में नहीं है) अलग foo
उदाहरणों के साथ बार-बार उस पर invoker<foo>::operator()(foo&)
कॉल करने के लिए, यह करने के लिए प्राप्त करना चाहता है जो गुजर सकता है उन कॉल को foo
की foo::operator()()
विधि पर अग्रेषित करें।
मुझे पता है कि यह केवल कुछ पंक्तियां हैं, लेकिन ऐसा लगता है कि यह संभवतः पहले से ही एसटीएल के कार्यात्मक, या boost::bind
द्वारा प्रदान किया गया है। सिवाय इसके कि मैं एक चाल नहीं देख सकता, अगर कोई है। (मुझे यकीन है कि मैं पहले व्यक्ति बहुत कुछ इस तरह उपयोग करने के लिए नहीं कर रहा हूँ हूँ, करता है यह एक नाम है?)
मुझे लगता है कि सी ++ 11 में इसके लिए कुछ भी है – pyCthon
अभी के लिए मैं g ++ 4.4.5 पर हूं; मुझे नहीं लगता कि जी ++ को 4.5 तक लैम्बडा मिला है। यद्यपि एक पोस्ट किया गया है, तो एक लैम्ब्डा समाधान देखने के लिए उत्सुक; मैं अपने आवेदक वर्ग के साथ जी ++ संस्करण अपग्रेड तक रह सकता हूं। – timday
आप 'foo :: ऑपरेटर()' को सीधे क्यों नहीं कॉल करेंगे? मेरा मतलब है, जिस वर्ग को 'इनवॉकर :: ऑपरेटर()' कहते हैं, उसे 'some_invoker (some_foo) जैसे कुछ करना है;', जबकि आप इसे इस तरह से कॉल कर सकते हैं: 'some_foo(); '। आप संकेत की एक अनावश्यक परत जोड़ रहे हैं। – mfontanini