私はこのコードを実行しようとします。私はほとんど存在していますが、私はラインで捕まってしまった:すべてのメンバー関数を渡して、フリー関数のブーストポインタを作成します。
_f = std::bind1st(
std::mem_fun(f, x);
まず、私は任意のコードを変更する必要はありませんことをご理解くださいますが、コンストラクタ。どうして?私は学びたいから。最終的に私はラッパクラスFunc
を書いて、自由な関数とメンバ関数をこのように同時に扱いたいと思っています。
だから、std::mem_func()
-call内の最初の引数として何を入れなければならないのですか? 私は数多くのことを試しました。
おそらくこれは重複していますが、この問題の検索方法はわかりません。私は語彙が足りない。誰かがチュートリアルや何かを指し示すことができれば、この問題を表現するのに役立ちます。事前に
#include <boost/function.hpp>
#include <iostream>
struct X
{
int foo(int i)
{
return i;
};
};
class Func
{
public:
Func(X *x, int (X::* f) (int))
{
_f = std::bind1st(
std::mem_fun(f, x);
std::cout << _f(5); // Call x.foo(5)
};
private:
boost::function<int (int)> _f;
};
int main()
{
X x;
Func func(&x, &X::foo);
return 0;
}
ありがとう:
はここで完全なサンプルコードです。
あなたが学んでいるなら、 'boost :: bind'を見てください。物事をクリックします... – Nim
この例は、boost関数のドキュメントから来ています。そこでは、彼らはブーストを利用しない:この文脈でのバインド。私が問題を抱えていた行を(単純な)boost:bind() - 呼び出しに変更できれば、それについて知ってうれしいです。 – AudioDroid