2015-10-23 6 views
7

मैं विजुअल स्टूडियो (सी ++), शायद एक एक्सटेंशन में उपयोग करने के लिए कुछ बनाना चाहता हूं, जिसका उपयोग दो ज्ञात कार्यों के साथ किया जाएगा। मुझे कोशिश करने और समझाओ। मान लें कि मेरे पास दो कार्य हैं प्रारंभ() और स्टॉप()। कभी-कभीपहचान दो फ़ंक्शन

start(); 
do something... 
stop(); 

यह पता है कि शुरू कर रहा है एक तरह से भ्रमित हो सकता है और क्या रोक रहा है: मैं आमतौर पर की तरह इन कार्यों का उपयोग

start(); 
do something... 
start(); 
do something... 
start(); 
do something... 
stop(); 
stop(); 
stop(); 

मुझे समझने की किस बात के लिए शुरू कर रहा है और क्या है रोकना मुझे मैन्युअल रूप से सभी लाइनों की पहचान करने की आवश्यकता है।

start(){ 
do something.... 
start(){ 
do something ... 
} 
} 

हर बार जब मैं बंद शुरू कोष्ठक बंद समारोह करीब होगा और कोड भी बहुत कुछ का आयोजन किया जाएगा: मैं की तरह कुछ बनाने के लिए करना चाहते हैं।

क्या आपको लोगों को इस बारे में कोई विचार है कि इसे कैसे पूरा किया जाए या ऐसा कुछ?

+2

शायद आप एक स्थानीय ऑब्जेक्ट बना सकते हैं जिसका कन्स्ट्रक्टर 'स्टार्ट' कहता है और जिसका विनाशक 'स्टॉप' कहता है? –

उत्तर

4

सी ++ में आप इस तरह के कोड को लिख सकते हैं, लेकिन आपको उच्च ऑर्डर फ़ंक्शंस और सी ++ लैम्बडास को समझने की आवश्यकता है।

#include <iostream> 

class Executor 
{ 
public: 
    void perform(void (*routine)()) 
    { 
    start(); 
    routine(); 
    stop(); 
    } 

    void start() { std::cout << "start" << std::endl; } 
    void stop() { std::cout << "stop" << std::endl; } 
}; 

int main() 
{ 
    Executor executor; 
    executor.perform([](){ 
     std::cout << "perform 0" << std::endl; 
    }); 
    executor.perform([](){ 
     std::cout << "perform 1" << std::endl; 
     Executor executor; 
     executor.perform([](){ 
      std::cout << "perform 10" << std::endl; 
     }); 
    }); 
} 
+0

उसने पूरी तरह से काम किया! आपको बहुत - बहुत धन्यवाद! –

3

आप ऐसा कुछ भी कर सकते हैं।

start(); 
    { 
     //do something... 
     start(); 
     { 
      //do something... 
      start(); 
      { 
       //do something... 
      } 
      stop(); 
     } 
     stop(); 
    } 
    stop(); 

यह आप start();stop(); बयान // do something अंतर्गत आता है जो करने के लिए परिभाषित करने के लिए मदद मिलेगी।

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