2017-02-25 3 views
7

私は2つの関数を持っていますが、これは引数として関数を取りますが、これはうまくいきます。C++は渡された関数を使用しています

class XY { 
public: 

    void first(void f()); 
    void second();   
}; 

void XY::first(void f()){ 

} 

void XY::second(){ 
f(); //passed function from first() 
} 
+0

あなたは最初から2番目呼び出したり、後でにおいて第2の独立して呼び出す行うのですかポイント? – NineBerry

+1

これを見てみたいかもしれません。 http://stackoverflow.com/questions/12662891/passing-a-member-function-as-an-argument-in-c – Transzendental

+0

Firstは1回呼び出され、2回目は独立して呼び出されます。 – Maximilian

答えて

12

あなたは呼び出し可能に保存し、後でそれを呼び出すためにのstd ::機能を使用する場合があります。

class X { 
    public: 
     void set(std::function<void()> f) { 
      callable = f; 
     } 

     void call() const { 
      callable(); 
     } 

    private: 
     std::function<void()> callable; 
}; 

void f() { 
    std::cout << "Meow" << std::endl; 
} 

そして、Xのインスタンスを作成し、呼び出し可能な設定:

X x; 
x.set(f); 

後で呼び出し保存呼び出し可能:

x.call(); 
+3

upvoted、すばらしいC++ 11答え、テンプレートはヘッダーの一部です – user

+0

@userスペースを節約するために、通常は本やプレゼンテーションで必要となるので、必要なヘッダーを省略します。 –

+0

ブックやプレゼンテーションにスペース制限はありません。書籍やプレゼンテーションにはプリプロセッサディレクティブ'#include'が推奨されます。 –

関連する問題