4/5 (8 avis)
Vue 6 902 fois - Téléchargée 384 fois
Voici le programme de test lié à cette classe. #include "interpret.hpp" #include<iostream> using namespace std; // Quelques fonctions libres et functor de traitement // (arguments passés en chaine de caractère) void f_traitement1( string const & args ) { cout << "Appel de T1 (" << args << ")" << endl; } void f_traitement2( string const & args ) { cout << "Appel de T2 (" << args << ")" << endl; } void f_traitement3( string const & args ) { cout << "Appel de T3 (" << args << ")" << endl; } struct f_traitement4 : t_functor { void operator()(std::string const & args) const { cout << "Appel de T4 (" << args << ")" << endl; } }; struct f_traitement5 : t_functor { void operator()(std::string const & args) const { cout << "Appel de T5 (" << args << ")" << endl; } }; struct f_traitement6 : t_functor { void operator()(std::string const & args) const { cout << "Appel de T6 (" << args << ")" << endl; } }; // programme de test int main() { // Instanciation des functors f_traitement4 f_inst_traitement4; f_traitement5 f_inst_traitement5; f_traitement6 f_inst_traitement6; // Instanciation de l'interpreteur t_interpreteur it(' ','\n'); // Initialisation de l'interpreteur it.lier( "t1", &f_traitement1 ); it.lier( "t2", &f_traitement2 ); it.lier( "t3", &f_traitement3 ); it.lier( "t4", &f_inst_traitement4 ); it.lier( "t5", &f_inst_traitement5 ); it.lier( "t6", &f_inst_traitement6 ); it.lier( "t1+4", &f_traitement1 ); it.lier( "t1+4", &f_inst_traitement4 ); // Serie de tests it( "" ); // rien it( "t1\n" ); // Appel de T1 () it( "t2 a b c d\n" ); // Appel de T2 (a b c d) it( "t1\nt2 a b c d\n" ); // Appel de T1 () // Appel de T2 (a b c d) it( "t1\nt2 a b c d\nt4\nt3 d f e\nt6\nt6\n" ); // Appel de T1 () // Appel de T2 (a b c d) // Appel de T4 () // Appel de T3 (d f e) // Appel de T6 () // Appel de T6 () it( "t1+4 x y z\nt1\n" ); // Appel de T1 (x y z) // Appel de T4 (x y z) // Appel de T1 () // Cas d'erreur try { it( "t6\nt0\n" ); } catch( t_interpreteur::ex_interpreteur & e ) { cout << e.what() << " " << e.ligne_commande_erronee << endl; } // Appel de T6 () // exception interpreteur : commande inconnue t0 try { it( "t1" ); } catch( t_interpreteur::ex_interpreteur & e ) { cout << e.what() << " " << e.ligne_commande_erronee << endl; } // exception interpreteur : commande inconplete t1 }
19 août 2005 à 20:24
21 août 2005 à 12:05
Merci pour la source, c'est pas mal du tout ! Pas exactement ce à quoi je m'attendais mais j'y ai deja appris pas mal de choses, et je n'ai pas encore tout analysé !
Le programme va droit au but, il n'y a rien d'inutile ou de superflu, bravo.
Je n'ai jamais fait de C++ approfondi auparavant, juste du "C avec classe" (j'ai lu ca dans un autre poste) donc il faut que je m'habitue.
Puis je l'implanterai dans ma source.
Compilation sans erreur avec VC++ 6.0 mais 299 warning, puis 39 en mettant le warning level au minimum.
Tu compiles avec quoi ?
Je n'ai pas de compilateur sur le PC que j'utilise là et je ne me souviens plus du warning recurrent. Sans doute du coté des <...>. C'est assez genant si on recherche d'autres warning.
Sur ce, @+ et encore merci !
21 août 2005 à 12:41
VC6 est une usine à warnings lorsqu'on exploite les composants de la STL.
Je te propose d'y regarder de plus pres en semaine, histoire d'éliminer un maximum de warnings.
Je compile avec GCC et je n'ai aucun warning.
N'hésite pas à me demander des évolutions pour adapter ce source à tes besoins.
Cordialement,
Xterm-in'Hate.
16 avril 2006 à 19:53
il faudrait integrer ca avec le parseur XML pour pouvoir avoir un script plus lisible ^^
12 févr. 2008 à 11:52
Bien fait.
Tu devrais peut-être ajouter "foncteur" à la liste des mots clé...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.