Qu'est-ce que boost::program_options::notify() pour?
Cette question est sur le C++ Boost program_options bibliothèque.
Tous les tutoriels sont très clairement que je devrais l'appeler notify()
sur mon terminé variable de la carte, mais je ne suis pas sûr de ce que cela est en train de faire pour moi. Commentant ne semblent avoir aucun effet, et la documentation n'est pas entré dans le détail:
http://www.boost.org/doc/libs/1_47_0/doc/html/boost/program_options/notify.html
D'autres sources suggèrent qu'il s'exécute "défini par l'utilisateur" des fonctions. Si oui, comment sont les fonctions enregistrées et que font-ils? Ils pourraient lancer des exceptions?
Vous devez vous connecter pour publier un commentaire.
notify()
est un fonction de membre de value_semantic. C'est un crochet qui est fourni de manière à ce que, une fois la dernière valeur d'une option est déterminé, toute mesure qui doit être prise avec cette option peut être effectué automatiquement et être encapsulé dans sa propre fonction. Cela empêche le code d'avoir une longue fonction qui agit sur chacune des options. Comme les options possibles croître, ce genre de code de procédure peuvent obtenir trop compliqué.Vous pouvez voir un exemple de configuration d'un notify fonction dans la Boost manuel:
Je pense que vous êtes sur la bonne voie quand vous parlez de "foncteur"...
Il est assez commun pour une option de traitement par passage de son argument(s) pour certaines méthode de l'objet. Cela peut être fait plus directement avec les déclarants si vous pouvez envelopper la méthode en quelque chose qui notifiant() accepte comme argument. Et vous pouvez. (Si boost::function a un moyen de le faire, je ne suis pas assez familier avec elle (et je suis trop paresseux pour aller étudier à présent) -- le suivant utilise les routines dans l'en-tête fonctionnelle de STDLIB.)
Exemple:
Une de vos options est --config-file, en prenant un argument de type chaîne, qui indique le chemin de la non-fichier de configuration par défaut. Vous avez une classe appelée ConfigParser. Sans déclarants, votre code pourrait ressembler à quelque chose comme ceci:
Avec les déclarants: