Bonjours !...

Je bloque sur un code C++1x pourtant très bête, et sur une erreur de compilation incompréhensible :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <functional>
using namespace std;
 
class Event
{
      public:
            Event & operator += (function < void (const Event &) > &_trigger)
            {
                   ;
            }
};
 
void onClick (const Event &e)
{
      ;
}
 
int main ()
{
      Event e;
      e += onClick;
}
j'ai largement éclairci le code je pense qu'il s'explique de lui-même. Comme vous pouvez le voir j'utilise les functional qui sont la partie C++1x du code. Ce code plante avec cette erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
In function ‘int main()’:
21: error: no match foroperator+=’ in ‘e += onClick’
7: note: candidates are: void Event::operator+=(std::function<void(const Event&)>&)
=== Build finished: 1 errors, 0 warnings ===
En revanche en utilisant les pointeurs de fonctions classiques, ça fonctionne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <functional>
using namespace std;
 
class Event
{
      public:
            void operator += (void(* _trigger) (const Event &))
            {
                   ;
            }
};
 
void onClick (const Event &e)
{
      ;
}
 
int main ()
{
      Event e;
      e += onClick;
}
je ne comprend pas le rapport entre l'utilisation des functional et le message de l'erreur

Mon but est évidemment d'utiliser les functional et non pas de rester sur les pointeurs de fonction classiques ! Qu'est ce que je dois corriger pour que mon code compile ??