2011-09-14 8 views
1

関数を引数として渡して実行するにはどうすればよいですか?私はこのような何かをしようとしています:Voidをポインタとしてクラスに渡し、その内容を実行する

class Foo{ 
private: 
    void (*external); 
public: 
    Foo(void (*function)()){ *external = *function; } 
    ~Foo(){ } 
    bool Execute(){ 
     *external(); // Somehow execute 'external' which does the same thing with 'function' 
     return true 
    } 
}; 

void pFnc(){ 
printf("test"); 
} 


int main(){ 
Foo foo = Foo(&pFnc); 
foo.Execute(); 
return 0; 
} 

これはもちろん動作していません。

答えて

2

あなたは近くにいました。

class Foo 
{ 
public: 
    typedef void(*FN)(void); 
    Foo(FN fn) : fn_(fn) {}; 
    bool Execute() 
    { 
     fn_(); 
     return true; 
    } 
    FN fn_; 
}; 

void pFunc(){ 
    printf("test"); 
} 

int main() 
{ 
    Foo foo(&pFunc); 
    foo.Execute(); 
} 
+0

ありがとうジョン、それは魅力のように働いた! – Christian

+0

ようこそ。あなたのコールバックを楽しんでください。 :) –

1

external = function; 

。また

external(); 

と実行とのセットを、外部関数ポインタvoid (*external)()として宣言されなければなりません。それ以外の場合は、関数ポインタとvoidポインタの間でキャストする必要があります。

2

は試してみてください。

void (*external)(); 

あなたのオリジナルの宣言は、voidへのポインタではなく、voidを返す関数へのポインタです。

関連する問題