में noncopyable लेकिन movable ऑब्जेक्ट को संग्रहीत करना मान लीजिए मेरे पास एक मज़ेदार है, जो noncopyable लेकिन movable है, मैं इसे std :: function में कैसे स्टोर कर सकता हूं? यानी, निम्नलिखित कोड कैसे संकलित करें? (जीसीसी 4.6 का उपयोग कर)std :: function
#include <functional>
#include <iostream>
struct S
{
S() = default;
S(S const&) = delete;
S& operator=(S const&) = delete;
S(S&&) { }
void operator()() { }
};
std::function<void()> func;
void make_func()
{
S s;
func = std::bind(std::move(s)); // This won't compile
}
int main()
{
make_func();
}
क्योंकि 's' स्थानीय है और दायरे से बाहर चला जाता है कि काम नहीं करेगा ... – Yahia
' std :: समारोह <> 'प्रतिदेय वस्तु यह लपेटता शामिल नहीं है (मैं ठीक मान होता _avoid_ को उन्हें मुझे जंगम/प्रतिलिपि बनाने की आवश्यकता है)। – sehe
यदि आप अपना कोड फिर से डिज़ाइन करते हैं तो यह संभव है और आप * 'std :: function' प्रारंभ करने में सक्षम हैं। उदाहरण के लिए यह 'एस एस काम करता है; std :: function func (std :: ref (s)); समारोह(); '। लेकिन आपको 'func' से पहले गुंजाइश से बाहर नहीं जाना है जिसका अर्थ है कि इसे किसी अर्थ में वैश्विक होना चाहिए। लेकिन फिर भी आप * std :: function' (प्रतिबंधों के साथ) में एक जंगम ऑब्जेक्ट स्टोर कर सकते हैं यदि यह आपका प्रश्न है। –
alfC