Bonjour.
Je débute les tutos avec boost::proto et j'avais une question très simple.
J'ai modifié un peu le helloworld du tout premier exemple :
Le programme se déroule comme un programme "normal", sans accroche. Cependant, j'ai un peu de mal à comprendre ce qui est fait à la compilation et ce qui est fait à l'exécution (l'avantage de boost::proto, si j'ai bien suivi c'est justement de pouvoir faire entre autres du précalcul à la compilation).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <iostream> #include <boost/proto/proto.hpp> #include <boost/typeof/std/ostream.hpp> using namespace boost; proto::terminal< std::ostream & >::type cout_ = { std::cout }; template< class Expr > void evaluate( Expr const & expr ) { proto::default_context ctx; proto::eval(expr, ctx); } int main() { evaluate( cout_ << "hello" << ',' << " world"<<"\n"); int a; std::cout<<"type a = "; std::cin>>a; evaluate( cout_ << "hello" << ',' << " world"<< "and" <<" a = " << a <<"\n"); return 0; }
Est-ce que le main compilé est équivalent à celui là ?
C'est à dire est-ce que boost::proto a concaténé autant que faire se peut les chevrons des cout (même si le compilo l'aurait peut être fait de lui-même) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 int main() { std::cout<< "hello, world\n"; int a; std::cout<<"type a = "; std::cin>>a; std::cout<< "hello, world and a = "<<a<<"\n"; return 0; }
Merci.
Partager