0

MSVC7 でブースト v1.37 を使用しています。私はこれらの古いバージョンで立ち往生しており、アップグレードできないため、ここで私の手段の範囲内で作業するのを手伝ってください。答えとしてアップグレードを提案しないでください.

3 つのメンバー関数を持つクラスがあります。boost::function同じクラスの異なるインスタンスで異なるメンバー関数を呼び出すために使用できるを定義したいと思います。

typedef boost::function<bool (unsigned, unsigned)> MyFunc;

バインドは次のようになります。

boost::bind( &A::foo1, _1, _2, _3, boost::ref(some_fixed_param) );

boost::bind上記をパラメーターとして受け取る関数に渡す必要がありMyFuncます。

インスタンス オブジェクトがプレースホルダーとして設定されているboost::function関数オブジェクト (から) を取得するには、どのように設定する必要がありますか? インスタンス ( ) を にboost::bind渡すにはどうすればよいですか? ここでコンパイラエラーが発生し続けるので、これを正しく理解していることを確認しようとしています. 私が明確に説明したことを願っています。前もって感謝します。thisboost::function

編集

私が得る本当のエラーは次のとおりです。

sample.cpp(1156) : error C2664: 'process' : cannot convert parameter 2 from 'boost::_bi::bind_t<R,F,L>' to 'FooFunc &'
        with
        [
            R=bool,
            F=boost::_mfi::mf3<bool,A,unsigned int,unsigned int,int>,
            L=boost::_bi::list4<boost::arg<1>,boost::arg<2>,boost::arg<3>,boost::reference_wrapper<int>>
        ]

私が使用しているコード:

typedef boost::function<bool (unsigned, unsigned)> FooFunc;

class A
{
public:
    bool foo1( unsigned s1, unsigned s2, int s3 )
    {
    }
};

bool process( unsigned s1, FooFunc& foo )
{
    unsigned s2 = 100;
    A* a; // pretend this is valid
    return foo( s1, s2 );
}

void dostuff()
{
    int s3 = 300;

    process( 200,
        boost::bind( &A::foo1, _1, _2, _3, boost::ref( s3 ) ) );
}

これで、これが有効なコードではないことがわかりました。これは、関数内で何らかの方法でインスタンス ポインターprocess()を呼び出す必要があるためです。2 つを接続する方法がわからず、コンパイラ エラーが発生している理由もわかりません。fooa

4

1 に答える 1