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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
int add5(int i)
{
	return i+5;
}
j'ai un entier resultat et en voulant compiler ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.