この例題を考えてみてください。 第2引数がメンバ関数へのポインタである関数で暗黙の変換を強制するにはどうすればいいですか? 関数の引数リストに明示的にキャストするのは、私が今ライトを獲得したかったものではありません。 代わりに、私は何とかそれを取得としてポリモーフィズムで暗黙の変換を強制するには?
struct Base
{
virtual ~Base() = 0 {}
};
struct Derived : public Base
{
void f(){}
};
typedef void(Base::*polymorph)();
// how do I force IMPLICIT conversion here: EDIT: (polymorph type work only for polymorph pointer type no conversion)
void func(Base* arg1, polymorph arg2) // void* arg2, (void*) arg2 etc... dosn't work
{
polymorph temp = reinterpret_cast<polymorph>(arg2); // to achive this
}
int main()
{
Derived* test = new Derived;
// first parameter work but another gives an error
func(test, &Derived::f); // BY NOT CHANGING THIS!
delete test;
return 0;
}
私はそれができないと思う。 funcでは、Baseオブジェクトを扱っていることを(静的に)知っています。すべてのBaseオブジェクトにそのメソッドがあるとふりをするのは危険です。 - また、ポインタが関係しているからといって、 'new/delete'を使う必要はありません:' Derived test; func(&test、&Derived :: f); ' – visitor
問題は十分に明確ではありません。説明してください。 –
私は、メンバメソッドへのポインタを、メンバ引数へのポインタを取る関数引数に入力することができるようにしたいと考えています。私の例では関数は "polimorph"型を取るべきですが、それはありません。 – codekiddy