The four I use most of all are file system, regex, threads and path. It made porting my server from Mac to Linux to windows pretty easy. I have some socket issues I am still dealing with but soon I will have a version of the server that runs on all three which is not a small accomplishment with the compiler and server I have. Ken -----Original Message----- From: programmingblind-bounce@xxxxxxxxxxxxx [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Littlefield, Tyler Sent: Thursday, April 07, 2011 11:12 AM To: programmingblind@xxxxxxxxxxxxx Subject: Re: boost::spirit and boost in general for c++ people. Ken promoted boost::any (which I won't use), boost::serialization (which again is huge). There are some good tools in boost, but not all of them are really worth using. boost::iostreams, boost::serialization, boost::any are some that come to mind. On 4/7/2011 8:35 AM, Jared Wright wrote: > Ahahaha, I distinctly remember many such exchanges. Classic. Nice > demo, Ty. > On 4/7/2011 10:06 AM, Ken Perry wrote: >> Snicker welcome to the future... Hmm how many times have I told you >> to use >> it and you told me no??? >> >> Ken >> >> -----Original Message----- >> From: programmingblind-bounce@xxxxxxxxxxxxx >> [mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Littlefield, >> Tyler >> Sent: Thursday, April 07, 2011 9:09 AM >> To: programmingblind@xxxxxxxxxxxxx >> Subject: boost::spirit and boost in general for c++ people. >> >> hello all: >> Recently I got into using boost a bit and started finding uses for it >> all over the place. I would like to encourage those who haven't yet and >> use c++ to check it out; it is quite powerful and can eas some of your >> work and provide really cool features along the way. For example: >> boost::function lets you take callbacks in multiple forms; boost::bind >> will let you bind a functor to it's arguments and pass that as your >> callback, which means you can bind to a static member function, a member >> function (and pass the object with boost::ref), a global function and >> you can also use boost::lambda. >> There are many more utilities out there; I highly recommend checking out >> boost::asio, boost::fusion, boost::function and boost::bind. >> In the spirit of convincing you all, I wrote a small calculator program >> that does single operations (1+3, 3*5), etc and returns the result. >> My next step is to split up my parsing into different rulesets and then >> work on generating an AST so that I can handle larger more complex >> calculations. >> /* >> A simple calculator, supports multiplication, division, addition and >> subtraction. >> */ >> #include<boost/spirit/include/qi.hpp> >> #include<boost/spirit/include/phoenix_core.hpp> >> #include<boost/spirit/include/phoenix_operator.hpp> >> #include<boost/spirit/include/phoenix_operator.hpp> >> #include<iostream> >> #include<string> >> #include<boost/fusion/include/adapt_struct.hpp> >> #include<boost/fusion/container/vector.hpp> >> #include<boost/fusion/container/vector/convert.hpp> >> #include<boost/fusion/include/io.hpp> >> >> namespace qi = boost::spirit::qi; >> namespace ascii = boost::spirit::ascii; >> namespace phoenix = boost::phoenix; >> >> struct calculation >> { >> int a, b; >> char op; >> }; >> BOOST_FUSION_ADAPT_STRUCT(calculation, (int, a) (char, op) (int, b) ) >> >> template<typename iterator> >> class CParser:public qi::grammar<iterator, calculation(), >> qi::ascii::space_type> >> { >> qi::rule<iterator, calculation(), qi::ascii::space_type> crule; >> public: >> CParser():CParser::base_type(crule) >> { >> using qi::ascii::char_; >> using qi::int_; >> >> crule %= (int_>> >> (char_('+')|char_('-')|char_('*')|char_('/'))>> >> int_); >> } >> }; >> >> int main() >> { >> CParser<std::string::iterator> p; >> std::string str; >> calculation result; >> >> std::cout<< "Enter your calculation>"; >> getline(std::cin, str); >> >> bool r = phrase_parse(str.begin(), str.end(), p, qi::ascii::space, >> result); >> if (r) >> { >> std::cout<< "a: "<< result.a<< " b: "<< result.b<< " op: " >> << result.op<< std::endl; >> switch(result.op) >> { >> case '+': >> std::cout<< "Result: "<< (result.a + result.b)<< >> std::endl; >> break; >> case '-': >> std::cout<< "result: "<< (result.a - result.b)<< >> std::endl; >> break; >> case '*': >> std::cout<< "Result: "<< (result.a * result.b)<< >> std::endl; >> break; >> case '/': >> if (result.a == 0) >> { >> std::cout<< "Division by zero error."<< std::endl; >> break; >> } >> std::cout<< "result: "<< (result.a / result.b)<< >> std::endl; >> break; >> default: >> std::cout<< "Invalid operation."<< std::endl; >> } >> } >> else >> { >> std::cout<< "Invalid input."<< std::endl; >> } >> >> return 0; >> } >> > > __________ > View the list's information and change your settings at > //www.freelists.org/list/programmingblind > > -- Thanks, Ty __________ View the list's information and change your settings at //www.freelists.org/list/programmingblind __________ View the list's information and change your settings at //www.freelists.org/list/programmingblind