Veuillez considérer cet exemple, comment force-t-on la conversion implicite dans la fonction dont le second paramètre est pointeur vers la fonction membre. Le fait de lancer explicitement dans la liste des arguments de la fonction n'est pas ce que je veux faire maintenant. Au lieu de cela, je voudrais que le compilateur faire en quelque sorte que comme il le fait avec le paramètre FIRST ...Comment forcer la conversion implicite dans le polymorphisme?
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;
}
Je suppose que cela ne peut tout simplement pas être fait. En tout, vous savez (statiquement) que vous avez affaire à un objet Base, et il serait dangereux de prétendre que n'importe quel objet Base possède cette méthode. - Aussi, juste parce qu'il y a un pointeur impliqué, cela ne signifie pas que vous devez utiliser 'new/delete':' Derived test; func (& test, & Derived :: f); ' – visitor
La question n'est pas assez claire. S'il vous plaît expliquer. –
Je veux être en mesure de passer un pointeur sur la méthode membre de ce que jamais de type à l'argument de la fonction qui prend l'argument pointeur-à-membre. dans mon exemple, la fonction devrait prendre le type "polimorph" mais ça ne marchera pas. – codekiddy