2012-01-03 8 views
1

読み込みがたくさん行われた後に、herehereのコードを読み込むことができません。共有オブジェクトから外部クラスメンバーを呼び出す

私は2つのクラスを持って、FIFO:

#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 

クラスFifoの初期化されたオブジェクトへのポインタを返すProcess_Wrapper::GetOutputPortIDtoFifoMapメンバ関数。

共有オブジェクト(.so)があり、クラスFifoProcess_Wrapperのヘッダーでコンパイルされています。つまり、.soファイルはこれらのクラスへのインターフェイスを認識します。

このファイルは、Process_WrapperProcess_Wrapper::function2)というメンバー関数から呼び出され、.soのポインタ-thisに渡されます。だから、私は共有オブジェクトがクラスProcess_Wrapperに関するすべてを知っていると仮定します。

.soファイルでは、メンバー関数Process_Wrapper::GetOutputPortIDtoFifoMapを呼び出そうとしていますが、明らかに機能しません。だから、私が試した:

p1->wptrが正しく Process_Wrapperオブジェクトへのポインタを返す
Fifo* (Process_Wrapper::*GetFifoMapping)(int) = p1->wptr->GetOutputPortIDtoFifoMap; 

私はここで迷っています。私はこのコンセプトにはまったく新しいので、その例は直接質問に答えません。それをどうやってやるの?

また、私はC++ 0x/C++ 11を使用しているので誰も私に(できれば)std :: bind、またはmem__fun_refを使って解決策を教えてもらえますか?

編集:さて、私は私は私の質問を絞り込むことができると思う:私はクラスMyclass、このクラスのインスタンスであるオブジェクトmyobjectを、持っています。 Myclassにはメンバ関数があり、いくつかの引数をとり、タイプPTRTYPEのポインタを返します。 Myclassのメンバ関数を他の関数に渡すように抽出するにはどうすればよいのですか?通常の関数へのポインタとして使用することができます。具体的には、次のようにします。メンバー関数へのバインドされたポインタから関数ポインタを抽出するにはどうすればよいですか?

+0

メソッドポインタを渡したいだけですか? – Geoffroy

+0

C++をどこで学びましたか? – StackedCrooked

+3

"メンバー関数へのバインドされたポインタから関数ポインタを抽出するにはどうすればよいですか?"できません。 –

答えて

1

私自身の質問に答えるために、私は "this"ポインタを.soオブジェクトに渡していました。しかし、実行時には、シンボルが見つからないというエラーが発生しました。このシンボルは 'U'であるか、.soファイルでマップされていませんが、この.soをロードするメインexe( 'T')で定義されています。私がしなければならなかったのは、メインexeを生成したリンカーオプションに '-rdynamic'を追加することでした。

明らかに、問題は単純であり、私の(間違った)仮説は、問題が初期化されたオブジェクトのメンバ関数へのポインタを正しく使用することに関連していることでした。

私が掲載した問題の説明が明確ではない可能性があることを理解しています。

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

関連する問題