मैं दृश्य स्टूडियो 2012.सी ++/सीएलआई में कार्य करने के लिए एक तर्क पास?
public Task SwitchLaserAsync(bool on)
{
return Task.Run(new Action(() => SwitchLaser(on)));
}
इस पर तर्क bool के साथ एक कार्य के रूप में (एक वर्ग MyClass
की सार्वजनिक nonstatic सदस्य) SwitchLaser
विधि निष्पादित करेंगे में के लिए सी # इस कोड है।
मैं प्रबंधित सी ++/सीएलआई में कुछ ऐसा करना चाहता हूं। लेकिन मैं किसी कार्य को चलाने का तरीका खोजने में सक्षम नहीं हूं, जो एक पैरामीटर लेने वाले सदस्य विधि को निष्पादित करेगा। (
void MyClass::SwitchLaserHelper()
{
SwitchLaser(laserOn);
}
सी # में जैसे कुछ समाधान होना चाहिए और सहायक कार्य करता है और सदस्यों को बनाने के लिए नहीं इस threadsafe नहीं है:
Task^ MyClass::SwitchLaserAsync(bool on)
{
laserOn = on; //member bool
return Task::Run(gcnew Action(this, &MyClass::SwitchLaserHelper));
}
SwitchLaserHelper
समारोह के कार्यान्वयन:
वर्तमान समाधान इस तरह है)।
उत्तर के लिए धन्यवाद। यह स्पष्ट है कि प्रबंधित कोड में लैम्ब्डा समर्थित नहीं है। फिर भी मैं सहायक वर्गों के निर्माण से बचना चाहता हूं। प्रलेखन में जो मैंने पाया है वह प्रबंधित C++ के लिए क्लास एक्शन है। यह एक तर्क के साथ एक समारोह करने में सक्षम होना चाहिए, लेकिन मैं इसका उपयोग करने में सक्षम नहीं था और विशेष रूप से कार्य :: रन विधि (या किसी भी तरह से कार्य वर्ग के साथ इसका उपयोग करें) के साथ। क्या एक सहायक वर्ग या सहायक तरीके के बिना कोई समाधान है? –
Bezousek
@ बेज़ौस्क: 'कार्य :: रन' को 'एक्शन' प्रतिनिधि की आवश्यकता होती है। नहीं, एक 'एक्शन' एक ही प्रकार का नहीं है। क्लोजर एक सहायक वर्ग के साथ लागू किया जाता है। यही कारण है कि सी # कंपाइलर आपके प्रश्न में आपके उदाहरण कोड से बनाता है, और यदि प्रबंधित लैम्ब्डा सुविधाओं को जोड़ा जाता है तो सी ++/सीएलआई कंपाइलर किसी दिन ऐसा करेगा। –