2013-04-01 7 views
5

चूंकि std::function सदस्य फ़ंक्शंस रख सकता है, इसलिए इसे किसी ऑब्जेक्ट इंस्टेंस में कहीं पॉइंटर स्टोर करना होगा।इस पॉइंटर को std :: function से कैसे प्राप्त करें?

मैं this पॉइंटर को std::function से कैसे प्राप्त कर सकता हूं जिसमें सदस्य कार्य होता है?

+0

क्या आपने उदा। http://en.cppreference.com/w/cpp/utility/functional/function? –

+0

@ ओली चेहरल्सवर्थ। बिल्कुल मैंने किया। मुझे बताओ कि क्या मैं जवाब के लिए अंधेरा था। – danijar

+1

मुझे पूरा यकीन है कि इस तरह की जानकारी लाइब्रेरी में जानबूझकर प्रकट नहीं हुई है, और इस प्रकार एक पोर्टेबल तरीके से पहुंच योग्य नहीं है। –

उत्तर

8

std::function प्रकार का एक ऑब्जेक्ट कॉल करने योग्य ऑब्जेक्ट रखता है। सदस्य फ़ंक्शन के लिए एक सूचक एक प्रकार का कॉल करने योग्य ऑब्जेक्ट है; इसे उचित वर्ग प्रकार के तर्क के साथ बुलाया जा सकता है, साथ ही इसके अतिरिक्त तर्क भी आवश्यक हैं। उदाहरण के लिए:

struct S { 
    void f(int); 
}; 
std::function<void(S, int)> g(&S::f); 

यह कॉल करने के लिए, टाइप करें S की एक वस्तु पारित:

S s; 
g(s, 3); 

नोट std::function वस्तु एक S वस्तु नहीं रखता है कि; यह केवल तभी होता है जब आप इसे कॉल करते हैं कि फ़ंक्शन पॉइंटर किसी ऑब्जेक्ट से बाध्य हो जाता है।

+1

मेरा लक्ष्य लैम्बडास को अनदेखा करना है जिसे मैंने 'std :: function' के रूप में पारित किया है। मैं तब ऐसा कैसे कर सकता हूं? अनचाहे करके मेरा मतलब है कि इसे 'इस' सूचक में विभाजित करना और आगे की प्रक्रिया के लिए 'std :: function :: target' का उपयोग करके स्थिर फ़ंक्शन पॉइंटर को विभाजित करना है। – danijar

+3

@danijar: आप अपना लक्ष्य अपने प्रश्न में क्यों नहीं डालते? आपका प्रश्न थोड़ा समझ में आता है। – GManNickG

+0

@danijar आप अपनी खुद की फ़ंक्शन ऑब्जेक्ट बना सकते हैं जो 'इस' सूचक को बांधता है और पुनर्प्राप्ति की अनुमति देता है। – Pubby

संबंधित मुद्दे