派生クラスから関数ポインタを必要とするベースクラス関数に関数を渡そうとしていますが、コンパイラエラーが発生します。派生クラス関数へのポインタをベースクラスに渡すことができません
[BCC32 Error] E2034 Cannot convert 'void (Bar::*)(int)' to 'void (Foo::*)(int)'
これは設計通りですが、不快なキャスティングを伴わない方法がありますか? boost::bind
ここに私を助けることができますか?サイドノートとして
#define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
class Foo
{
public:
typedef void (Foo::*FFunc)(int i);
void test(FFunc f)
{
CALL_MEMBER_FN(*this,f)(123);
}
void barf1(int i) {};
};
class Bar : public Foo
{
public:
void barf2(int i) {};
};
void ffff()
{
Foo f;
f.test(Foo::barf1); // works
Bar b;
b.test(Bar::barf1); // works
b.test(Bar::barf2); // ERROR
}
、私は明白なアプローチではなく、関数ポインタである仮想関数を使用してこの作業の罰金を、持っていますが、私はちょうどそれがいくつかの後押しをしようとする前にこの方法で作業を取得しようとしています: :バインド策略は後で...
:次に、あなたがバインドを使用することができます
:に
:私はこのような何かを意味しますstd :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)と['std :: bind'](http://en.cppreference.com/w/ cpp/utility/functional/bind)? –