2015-10-23 13 views
7

Visual Studio(C++)で使用する何かを作成したいと思います。拡張子は、おそらく2つの既知の関数で使用されます。 私は試してみましょう。私に2つの機能があるとしましょう。start()stop()です。 私は通常のように、これらの関数を使用します。私は開始しているかを理解するためにIdent 2つの関数

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

とするものです:

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

それが開始され、何が停止しているかを知るために一種の混乱になるかもしれないいくつかの回停止私は手動ですべての行を識別する必要があります。私はスタートを閉じるたびに停止機能が密接になり、コードがはるかに開催されるブラケット

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

:私のようなものを作成したいと思います。

あなたはこれを達成する方法やそれに類することについて考えていますか?

+2

コンストラクタが 'start'を呼び出し、デストラクタが' stop'を呼び出すローカルオブジェクトを作成できますか? –

答えて

4

C++ 11では、このようなコードを書くことができますが、高次関数と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

それは完璧な仕事でした!どうもありがとうございます! –

3

このようなこともできます。

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

それはあなたが// do somethingが所属start();stop();文をWICHを定義するのに役立ちます。