[C++11] std::function, fonctions membres et héritage
Bonjour, j'ai un soucis avec GCC 4.7.2 (windows)
Je crée une class A (avec un attribut) et une class B (qui hérite de la class A, avec une fonction virtual)
Je crée un objet B, et un pointeur de méthode d'objet B que je converti en pointeur de méthode A
Et quand j'appelle ce pointeur, crash
Je vous donne le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| // Class A
struct A
{
int m_value;
};
// Class B
struct B : public A
{
virtual void foo() { std::cout << "Hello World!" << std::endl; }
};
// Main
int main()
{
// Création de l'objet
B object;
// Pointeur de méthode d'objet B
std::function<void (B*)> func_t = &B::foo;
// Pointeur de méthode d'objet A (convertion de B en A)
std::function<void (A*)>* func = reinterpret_cast< std::function<void (A*)>* >( &func_t );
// Appel de la fonction
(*func)(&object);
getwchar();
return 0;
} |
Alors, si je supprime l'attribut de la class A, plus de problème... Ou encore, si j'enlève le virtual à ma fonction, plus de problème non plus...
Mais bon, cela ne m'arrange absolument pas !
J'aimerais donc savoir si vous avez des problèmes avec votre compilo et le qu'elle vous utilisez
Et si possible comment régler ce problème ?
En réalité, j'ai un tableau de pointeur de méthode d'objet qui hérite de la class A et ma class A doit obligatoirement contenir un attribut (histoire de ne pas changer la conception)
Voilà, je vous remercie de votre aide (y) !