2015-10-23 16 views
7

Vorrei creare qualcosa da utilizzare in Visual Studio (C++), forse un'estensione, che verrà utilizzata con due funzioni conosciute all'interno. Lasciami provare e spiegare. Diciamo che ho due funzioni start() e stop(). Io di solito uso queste funzioni come:Ident two functions

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

Alcune volte potrebbe diventare una specie di confusione per sapere cosa sta iniziando e che cosa è l'arresto:

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

per me capire ciò che sta iniziando e ciò che è fermandosi Devo identificare tutte le linee manualmente. Vorrei creare qualcosa di simile:

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

Ogni volta che chiudo l'inizio parentesi la funzione di arresto sarà vicino e il codice sarà molto più organizzato.

Avete qualche idea su come realizzare questo o qualcosa di simile?

+2

Forse è possibile creare un oggetto locale il cui costruttore chiama 'start' e il cui distruttore chiama' stop'? –

risposta

4

In C++ 11 è possibile scrivere tale codice, ma è necessario comprendere le funzioni di ordine elevato e lambda C++.

#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

Questo ha funzionato perfettamente! Grazie mille! –

3

Si può anche fare qualcosa di simile.

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

vi aiuterà a definire al wich start();stop(); dichiarazione // do something appartiene.