2017-05-15 1 views
-3

私はメインとクラスの2つのファイルを持っています。私は、クラス内の関数(void)を呼び出すと、その関数の中から別のものをメインで呼び出す必要があります。検索の多くの前に私は、コールバックでそうする方法を発見し、コードは次のように終わった:スタティックコールバックの作り方C++

ファイル

#include <functional> 
#include <iostream> 

class Foo 
{ 
public: 
    std::function<void()> onCallBackResult; 
    void start(std::function<void()> callback) 
    { 
     onCallBackResult = callback; 
     second(); 
    } 
    void second() { //Needs to be static here 
     onCallBackResult(); 
    } 
}; 

void onCallBackResult() 
{ 
    std::cout << "Result\n"; 
} 

int main() { 
    Foo foo; 
    foo.start(std::bind(onCallBackResult)); 
} 

そして、それはちょっとうまく動作しますが、問題は、私は本当に必要だということですstartはWindows APIからWndProcで動作するので静的にすることができますが、私はmainから関数を呼び出す方法を修正する方法があるかどうかを知りたいので、クラススタティックからonCallBackResultを作成することはできません。 。

ありがとうございました!

+0

クラスはファイルではありません "がfoo.h" で。ファイルはクラスではありません。 –

+0

'Foo foo = Foo();'これをしないでください。 'Foo foo;'と書いてください –

+0

あなたの例のどの部分がうまくいきませんか? http://coliru.stacked-crooked.com/a/cecfed527cd8c263 – Amadeus

答えて

0

必要なものはすべてプロトタイプです。そのメカニズム(std::bind,std::function)は必要ありません。その後、

void onCallBackResult(); 

そして、もう一つのことを呼び出すための関数を変更します:

void start() 
{ 
//Do some tasks 
onCallBackResult(); 
} 
+0

問題は、私が呼びたいメインは常に同じ関数になるわけではないので、常にどちらを使うかを指定したいということです。 – OnelioD

+0

@OnelioD - あなたはまだそのすべてのメカニズムを必要としません。 「関数へのポインタ」を読んでください。 –

+0

私はそれについての検索をします、ありがとう – OnelioD