Maison >développement back-end >C++ >Les analyseurs Spirit peuvent-ils être utilisés avec des variables « auto » ?

Les analyseurs Spirit peuvent-ils être utilisés avec des variables « auto » ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-02 04:03:09199parcourir

Can Spirit Parsers Be Used with `auto` Variables?

Attribuer des analyseurs aux variables automatiques

Question :

Les analyseurs Spirit peuvent-ils être utilisés avec auto ?

Extrait de code :

auto bracketed_z = '[' >> +qi::char_('z') >> ']';

Lors de l'attribution d'un analyseur à une variable automatique, comme indiqué ci-dessus, le le code plante avec une erreur de segmentation. Cependant, transmettre l'analyseur directement à qi::parse() en ligne fonctionne très bien.

Réponse :

Non, les analyseurs Spirit ne sont pas destinés à être utilisés avec auto dans Spirit V2.

Explication :

Les modèles d'expression Proto sous-jacents contiennent des références à des temporaires. L'attribution d'un analyseur à une variable automatique entraîne la copie de l'analyseur, ce qui peut entraîner des références pendantes.

Solutions :

Pour contourner ce problème, vous pouvez utiliser les méthodes suivantes :

  • qi::copy() (disponible dans le coffre Boost après Boost 1.55.0)
  • boost::proto::deep_copy
  • BOOST_SPIRIT_AUTO

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn