-1

私はこれについていくつかの投稿を読みましたが、サンプルコードで探しているものを正確に見つけることができないようです.

私のヘッダーには次のものがあります:

void addEvent(void (*func)(Pack  *));

void triggerEvents(Pack * );

std::list<void(*)(Pack *)> eventList;

そしてcppファイルで

void DNetwork::addEvent(void (*func)(Pack *)){
    eventList.push_back(func);
}

void DNetwork::triggerEvents(Pack * pack){
    for (std::list<void (*)( Pack *)>::iterator it = eventList.begin(); it !=         eventList.end() ;it++ ){
        (*it)(pack);
    } 
}

これは無料の関数では正常に機能しますが、このリストにメンバー関数を追加しようとするとエラーが発生します。メンバ関数を (ランダム クラス オブジェクトから) ポインタ内に格納する方法を知っている人はいますか?

4

4 に答える 4

-1

次のようなオーバーロードを行うことができます。

std::list<void(*)(Pack *)> eventList;
void addEvent(void (*func)(Pack  *));
template<typename T>
void addEvent(void (T::*func)(Pack  *));
namespace Abstraction {
    template<typename T>
    void abstractlyAddEvent( T, std::list<void(*)(Pack *)> *eventList );
}
于 2013-06-25T18:49:00.600 に答える