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
渡すにはどうすればよいですか? ここでコンパイラエラーが発生し続けるので、これを正しく理解していることを確認しようとしています. 私が明確に説明したことを願っています。前もって感謝します。this
boost::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 つを接続する方法がわからず、コンパイラ エラーが発生している理由もわかりません。foo
a