インターフェイスを定義するライブラリを使用しています:
template<class desttype>
void connect(desttype* pclass, void (desttype::*pmemfun)());
そして私は小さな階層を持っています
class base {
void foo();
};
class derived: public base { ... };
のメンバー関数でderived
、呼び出したい
connect(this, &derived::foo);
しかし、実際には;&derived::foo
のメンバ関数ポインタのようです。base
gccが吐き出す
error: no matching function for call to ‘connect(derived* const&, void (base::* const&)())’
this
に明示的にキャストすることで、これを回避できますbase *
。しかし、コンパイラが呼び出しを一致できないのはなぜですかdesttype = base
(derived *
暗黙的に にキャストできるためbase *
)?
また、メンバー関数のポインターでは ないのはなぜですか?&derived::foo
derived