Boost Spirit x3 non compilé

1
Etchelon 2019-07-30 14:33.

Je suis la documentation x3 sur le site Web de boost, et j'ai essayé d'augmenter l'exemple sur la façon d'organiser le code avec les éléments expliqués dans l'exemple d'annotations qui suit. J'ai l'erreur suivante lors de la compilation du projet (avec g ++ ou MSVC):

erreur: aucune fonction correspondante pour l'appel à 'boost :: spirit :: x3 :: unused_type :: get ()'

Dans la première ligne de la fonction on_success dans le code suivant:

// tag used to get the position cache from the context
struct annotate_position
{
    template <typename T, typename Iterator, typename Context>
    inline void on_success(const Iterator &first, const Iterator &last, T &ast, const Context &context)
    {
        auto &position_cache = x3::get<position_cache_tag>(context).get();
        position_cache.annotate(ast, first, last);
    }
};

Le code peut être trouvé ici: Github .

L'exemple d'annotations est presque exactement le même code, juste dans un seul fichier, donc je ne peux pas comprendre ce qui ne va pas ...

1 answers

2
sehe 2019-08-01 11:10.

L'annotation utilise la with<>directive. Cela modifie le contexte de ces règles.

Le contexte, cependant, a été codé en dur config.hppcar cela permet de séparer les définitions de règle dans leur propre unité de traduction (fichier source).

Pour le réparer directement:

struct position_cache_tag;
using position_cache = boost::spirit::x3::position_cache<std::vector<iterator_type>>;

using simple_context_type = x3::phrase_parse_context<x3::ascii::space_type>::type;

using context_type = boost::spirit::x3::context<
    client::parser::position_cache_tag,
    std::reference_wrapper<position_cache>, 
    simple_context_type
>;

Cela devrait déjà fonctionner. Cependant, vous trouverez d'autres éléments manquants car l'ancienne parsefonction in main(sans annotations de position) était également toujours présente. En principe, ajouter un triplet comme

BOOST_SPIRIT_INSTANTIATE(person_type, iterator_type, simple_context_type)
BOOST_SPIRIT_INSTANTIATE(employee_type, iterator_type, simple_context_type)
BOOST_SPIRIT_INSTANTIATE(employees_type, iterator_type, simple_context_type)

suffirait à alléger, mais alors, évidemment, le code d'annotation on_successne se compilera pas. Si vous le souhaitez, vous pouvez vous sortir de ce désordre, mais je viens de supprimer le code inutilisé main.cpp.

PRIME

En prime, vous pouvez vous passer de reference_wrapperces jours, car je vois que vous utilisez Boost 1.70.

L'encapsuleur de référence était auparavant requis pour l'état mutable dans les directives, mais j'ai découvert récemment ( Spirit X3, Cette approche de gestion des erreurs est-elle utile? ) Que ce n'est plus nécessaire. Par conséquent, vous pouvez simplifier le contexte:

using context_type = boost::spirit::x3::context<
    client::parser::position_cache_tag,
    position_cache, 
    simple_context_type
>;

Et déposez le wrapper de référence aux deux extrémités:

auto &position_cache = x3::get<position_cache_tag>(context); // NOTE: no more .get()

Et

auto const parser =
    with<position_cache_tag>(positions)[client::employees()];

Code complet (Github)

Voici mon code de travail: https://github.com/sehe/corrupted-spirit contenant les commits suivants dans l'ordre, il est donc facile de trouver ce qui a changé pourquoi:

commit 2d1d553afab53d7a83620406c2dcd50967bf2765
Date:   Wed Jul 31 22:50:49 2019 +0200

    Build tweaks

    Make it compile on my linux box, and adding some minimum
    debug/sanitizer/diagnostics flags

commit 98a989bb165d0b25b6919449d4dd09f7656168c8
Date:   Wed Jul 31 22:51:50 2019 +0200

    Various compiler wanrings, no impact

commit 91f5c607c10a489e2d7b9e45dca55438d05419a2
Date:   Wed Jul 31 22:53:46 2019 +0200

    Fixed style issues in main.cpp

     - using namespace (my first hunch was with `ref` being std::ref instead
     of boost::ref, but that turned out a red herring. Better to be explicit
     though

     - added condition on use of ast[1]

commit 084700c80023d4fb291bee36f41cb99f23f7dffa
Date:   Wed Jul 31 22:51:20 2019 +0200

    Fix the context_type in config.hpp

commit df7f9505e042b93bcd62167090e89008788218de (HEAD -> master, sehe/master)
Date:   Wed Jul 31 22:56:20 2019 +0200

    Simplify the with directive

    1.70.0 no longer requires manual ref() for with directives with mutable
    context items.

Related questions

MORE COOL STUFF

Reba McEntire a révélé la tradition de Noël «amusante» qu'elle partage avec son fils Shelby Blackstock: «Nous rions beaucoup»

Reba McEntire a révélé la tradition de Noël «amusante» qu'elle partage avec son fils Shelby Blackstock: «Nous rions beaucoup»

Découvrez les traditions de Noël que Reba McEntire partage avec son fils, Shelby Blackstock, qui, selon elle, pourraient laisser certains confus.

Meghan Markle s'est liée avec Mariah Carey pour coiffer leurs cheveux naturels

Meghan Markle s'est liée avec Mariah Carey pour coiffer leurs cheveux naturels

Apprenez-en plus sur la façon dont Meghan Markle et Mariah Carey se sont liées sur leurs cheveux naturels dans un épisode du podcast "Archetypes" de Meghan.

Le prince Harry " garde espoir " de pouvoir arranger les choses avec sa famille : " Il aime son père et son frère "

Le prince Harry " garde espoir " de pouvoir arranger les choses avec sa famille : " Il aime son père et son frère "

Découvrez ce qu'une source a affirmé que le prince Harry espérait concernant les relations avec sa famille, en particulier le roi Charles et le prince William.

Brennon Lemieux, star de "Love Is Blind", répond aux accusations de violence conjugale

Brennon Lemieux, star de "Love Is Blind", répond aux accusations de violence conjugale

Un rapport de police accusant Brennon, star de "Love Is Blind", de violence domestique a récemment fait surface. Maintenant, Brennon a répondu aux réclamations.

Qui a dit ça? Le quiz des doubleurs

Qui a dit ça? Le quiz des doubleurs

Il y a le jeu d'acteur, puis il y a le doublage. Les deux sont difficiles à leur manière. Que savez-vous de ces légendes dans le domaine ?

Les Philippines organisent la plus longue fête de Noël au monde

Les Philippines organisent la plus longue fête de Noël au monde

Peut-être qu'aucun pays sur Terre n'aime Noël plus que les Philippines. Les résidents y célèbrent les vacances pendant quatre mois solides. Voici pourquoi.

L'intrication quantique est le phénomène le plus étrange de la physique, mais qu'est-ce que c'est ?

L'intrication quantique est le phénomène le plus étrange de la physique, mais qu'est-ce que c'est&nbsp;?

Einstein a qualifié ce phénomène d'"action effrayante à distance" et les physiciens viennent de remporter le prix Nobel pour leurs travaux, mais qu'est-ce que l'intrication quantique ?

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Des hommes noirs arrêtés à Philly Starbucks s'installent avec City pour 1 $ et un engagement de 200000 $ pour les jeunes entrepreneurs, s'installent avec Starbucks pour un montant non divulgué

Des hommes noirs arrêtés à Philly Starbucks s'installent avec City pour 1 $ et un engagement de 200000 $ pour les jeunes entrepreneurs, s'installent avec Starbucks pour un montant non divulgué

La manifestante Michelle Brown (à gauche) démontre devant un Starbucks de Center City le 15 avril 2018, à Philadelphie. Mis à jour mercredi 2 mai 2018, 3:10 p.

`` This Is America '' est la chanson n ° 1 en Amérique

`` This Is America '' est la chanson n ° 1 en Amérique

«This Is America» de Donald Glover était incontournable la semaine dernière - que ce soit la vidéo elle-même (elle a été vue plus de 109 millions de fois depuis ses débuts le 6 mai) ou dans le discours public autour de la vidéo (et, par extension, Glover, alias Childish Gambino, lui-même). Maintenant "This Is America" ​​fait ses débuts au No.

Les Teen Titans tentent de surpasser Deadpool Deadpool dans l'happy hour de la bande-annonce d'aujourd'hui

Les Teen Titans tentent de surpasser Deadpool Deadpool dans l'happy hour de la bande-annonce d'aujourd'hui

Bienvenue à nouveau dans Trailer Happy Hour, le Valhalla audio-visuel où toutes les bonnes promotions de films vont se battre éternellement pour votre amour, votre attention et vos clics. Aujourd'hui, nous avons des fêtes sauvages, des fusillades impliquant la police et un Will Arnett en colère qui sort des anecdotes comiques des années 80, alors allons-y.

Afropunk a-t-il perdu ses racines punk?

Afropunk a-t-il perdu ses racines punk?

Stephanie Keith / Getty Images Ce week-end, une mer de noirceur sans excuse s'abattra sur le commodore Barry Park de Fort Greene pour Brooklyn, New York

Le patinage artistique américain "frustré" par l'absence de décision finale dans l'épreuve par équipe, demande une décision équitable

Le patinage artistique américain "frustré" par l'absence de décision finale dans l'épreuve par équipe, demande une décision équitable

L'équipe attend les médailles qu'elle a remportées aux Jeux olympiques d'hiver de 2022 à Pékin, alors qu'un cas de dopage impliquant la patineuse artistique russe Kamila Valieva est en cours de règlement.

Les acheteurs d'Amazon disent qu'ils dorment «comme un bébé choyé» grâce à ces taies d'oreiller en soie qui coûtent aussi peu que 10 $

Les acheteurs d'Amazon disent qu'ils dorment «comme un bébé choyé» grâce à ces taies d'oreiller en soie qui coûtent aussi peu que 10 $

Des milliers d'acheteurs Amazon recommandent la taie d'oreiller en soie Mulberry, et elle est en vente en ce moment. La taie d'oreiller en soie est disponible en plusieurs couleurs et aide à garder les cheveux doux et la peau claire. Achetez les taies d'oreiller en soie alors qu'elles sont jusqu'à 46% de réduction sur Amazon

Un professeur de l'Université Purdue arrêté pour avoir prétendument vendu de la méthamphétamine et proposé des femmes pour des faveurs sexuelles

Un professeur de l'Université Purdue arrêté pour avoir prétendument vendu de la méthamphétamine et proposé des femmes pour des faveurs sexuelles

Le département de police de Lafayette a commencé à enquêter sur un professeur de l'Université Purdue en décembre après avoir reçu plusieurs plaintes concernant un "homme suspect s'approchant de femmes".

Concept Drift : le monde change trop vite pour l'IA

Concept Drift : le monde change trop vite pour l'IA

Tout comme le monde qui nous entoure, la langue est en constante évolution. Alors que dans les époques précédentes, les changements de langue se produisaient sur des années, voire des décennies, cela peut maintenant se produire en quelques jours, voire quelques heures.

L'Inde me botte le cul

L'Inde me botte le cul

Je suis de retour pour la première fois en six ans. Je ne peux pas vous dire depuis combien de temps j'attends ça.

Precios accesibles, nuestro aprendizaje desde la perspectiva iOS

Precios accesibles, nuestro aprendizaje desde la perspectiva iOS

Cómo mejoramos la accesibilidad de nuestro componente de precio, y cómo nos marcó el camino hacia nuevos saberes para nuestro sistema de diseño. Por Ana Calderon y Laura Sarmiento Leer esta historia en inglés.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

Language