hereとhereをたくさん読んだ後でも、コードを機能させることができません。問題は次のとおりです。
Fifo という 2 つのクラスがあります。
#ifdef __cplusplus
extern "C" {
#endif
class Fifo
{
public:
Fifo(int len);
~Fifo();
void AddTokens(void* buffer, unsigned len);
private:
// some variables here
};
#ifdef __cplusplus
}
#endif
および別のクラス Process_Wrapper:
#ifdef __cplusplus
extern "C" {
#endif
class Process_Wrapper
{
public:
Process_Wrapper(const std::string process_name);
Fifo* GetOutputPortIDtoFifoMap(int portID);
virtual ~Process_Wrapper();
protected:
private:
//some variables here
};
#ifdef __cplusplus
}
#endif
メンバー関数Process_Wrapper::GetOutputPortIDtoFifoMap
は、 class の初期化されたオブジェクトへのポインターを返しますFifo
。
Fifo
これで、クラスのヘッダーでコンパイルされてインクルードされた共有オブジェクト (.so) ができProcess_Wrapper
ました。つまり、.so ファイルはこれらのクラスへのインターフェイスを認識します。
Process_Wrapper
この .so ファイルを( )のメンバ関数から呼び出し、Process_Wrapper::function2
.so にポインタ - を渡しますthis
。したがって、共有オブジェクトはクラスに関するすべてを知っていると思いますProcess_Wrapper
。
.so ファイルで、メンバー関数を呼び出そうとしていますがProcess_Wrapper::GetOutputPortIDtoFifoMap
、明らかに機能しません。だから、私は試しました:
Fifo* (Process_Wrapper::*GetFifoMapping)(int) = p1->wptr->GetOutputPortIDtoFifoMap;
whereはオブジェクトp1->wptr
へのポインターをProcess_Wrapper
正しく返します。
私はここで迷っています。私はこの概念にまったく慣れていないため、例は質問に直接答えていません。どうすればそれを行うことができますか?
また、私は C++0x/C++11 を使用しているので、std::bind または mem__fun_ref を使用した解決策を (できれば) 教えてもらえますか?
編集:わかりました、質問を絞り込むことができると思います: classと、このクラスのインスタンスであるMyclass
objectがあります。にはメンバー関数があり、いくつかの引数を取り、タイプ のポインターを返します。通常の関数へのポインターとして使用できるように、別の関数に渡されるメンバー関数を抽出するにはどうすればよいですか。または、具体的には、メンバー関数へのバインドされたポインターから関数ポインターを抽出するにはどうすればよいですか?myobject
Myclass
PTRTYPE
Myclass