मेरे पास एक फ़ंक्शन पर इशारा करते हुए std::function
है। इस फ़ंक्शन के अंदर मैं सूचक को दूसरे फ़ंक्शन में बदल देता हूं।क्या फ़ंक्शनपोइंटर (std :: function) को कॉल किए गए फ़ंक्शन के अंदर बदलना सुरक्षित है?
std::function<void()> fun;
void foo() {
std::cout << "foo\n";
}
void bar() {
std::cout << "bar\n";
fun = foo;
}
int main() {
fun = bar;
fun();
fun();
}
मुझे कोई समस्या नहीं देख सकते हैं और यह सिर्फ ठीक काम करता है (here देखें), हालांकि मुझे यकीन है कि अगर यह ऐसा करने के लिए कानूनी है नहीं कर रहा हूँ। क्या ऐसा कुछ भी है जिसे मैं ऐसा नहीं कर रहा हूं (शायद सी ++ मानक मसौदे में (मैंने जल्दी से जांच की लेकिन अब तक कुछ भी नहीं देखा))?
इसमें कुछ भी गलत नहीं है। बस। –
कानूनी लेकिन खराब शैली, वैश्विक चर की स्थिति को नियंत्रित करने के लिए कड़ी मेहनत के कारण (जिसे आपको किसी भी तरह से बचने की कोशिश करनी चाहिए)। – Aziuth
मेरे पास एक मिनी गेम प्रोजेक्ट है जहां मैं 'std :: function' का उपयोग मुख्य लूप कॉलबैक (जिसे 60 गुना/सेकेंड कहा जाता है) के रूप में उपयोग करता है और इसे गेम स्टेटस (मेनू चयन, प्लेइंग, पॉज़िंग इत्यादि) को बदलने के लिए अलग-अलग तरीकों से असाइन किया जाता है। यह ठीक चलाता है। – tntxtnt