[Spirit] utilisation de phoenix::ref et de bind
Bonjour,
Toujours dans le l'optique de faire un petit parseur, je me heurte à un problème qui me parait étrange.
J'ai un parseur qui ne fait que de lire un int, et je voudrais mettre cet entier dans une variable après l'avoir fait passé dans une fonction.
Code:
1 2 3 4
| int add5(int i)
{
return i+5;
} |
j'ai un entier resultat et en voulant compiler ça
Code:
1 2
| rule<iter_t > form;
form = int_ [phx::ref(resultat) = boost::bind(add5,qi::_1)] |
j'ai une erreur de compilation qui remplis mon terminal.
Pourtant en remplaçant l'action par l'une de ces actions
Code:
1 2 3
| [_val = boost::bind(add5,qi::_1)];
[_val = qi::_1];
[phx::ref(resultat) = qi::_1]; |
ça compile et ça marche.
Ayant toujours vécu dans un monde ou l'opérateur = était transitif, j'ai du mal à comprendre pourquoi ça ne marche pas.
Evidement l'objectif final c'est pas d'ajouter 5 à un entier, juste de "maitriser" le ref et bind.
Ah et phx c'est boost::phoenix.
Enfin voilà je serais très reconnaissant envers celui qui pourrait me sortir de mon incompréhension.