2013-04-01 13 views
5

std::functionはメンバ関数を保持できるので、オブジェクトインスタンスへのポインタをどこかに格納する必要があります。std :: functionからこのポインタを取得するには?

メンバ関数を保持するstd::functionからthisポインタを取得するにはどうすればよいですか?

+0

http://en.cppreference.com/w/cpp/utility/functional/function? –

+0

@OliCharlesworth。もちろんやりました。私が答えに目が見えなかったかどうか教えてください。 – danijar

+1

私は、この種の情報が意図的にライブラリに公開されておらず、ポータブルな方法ではアクセスできないと確信しています。 –

答えて

8

タイプstd::functionのオブジェクトは、呼び出し可能オブジェクトを保持します。メンバ関数へのポインタは、呼び出し可能なオブジェクトの一種です。適切なクラス型の引数と必要な追加の引数で呼び出すことができます。例えば:

struct S { 
    void f(int); 
}; 
std::function<void(S, int)> g(&S::f); 

がそれを呼び出すために、タイプSのオブジェクト渡し:std::functionオブジェクトがSオブジェクトを保持していないこと

S s; 
g(s, 3); 

注意。関数ポインタがオブジェクトにバインドされているということだけを呼び出します。

+1

私の目標は、 'std :: function'として渡されたラムダを別の関数にラップすることです。どうすればいいですか?アンラッピングとは、それを 'this'ポインタと静的関数ポインタに' std :: function :: target'を使って分割して処理することを意味します。 – danijar

+3

@ダニジャール:代わりにあなたの目標をあなたの質問に入れてみませんか?あなたの質問はほとんど意味がありません。 – GManNickG

+0

@danijarあなたは 'this'ポインタをバインドして取得できる独自の関数オブジェクトを作ることができます。 – Pubby

関連する問題