Posts

Showing posts from October, 2012

Using stateful functors

For another example posts on functors (function objects) see here . A functor is an instance of a C++ class that has the operator() defined. One big advantage of functors is that when you define the operator() in C++ classes you not only get objects that can act like functions, but can also store state as well.

Using boost::bind to assign functions

Some code samples I have collated in the sample below, that demonstrate how boost::function can be assigned with functors, ordinary functions, class member functions and overloaded class member functions respectively. [code language="cpp"] #include <iostream> #include <boost/function.hpp> #include <boost/bind.hpp> using namespace std; // Class for example 1: functors class int_div { public: float operator()(int x, int y) const { return ((float)x)/y; }; }; // Class for example 2: : accessing functions float average( int values[], int n ) { int sum = 0; for (int i = 0; i < n; i++) sum += values[ i ]; return (float) sum / n; } // Class for example 3: accessing class members class DoStuff { public: void DoThis() { std::cout << "Do this" << std::endl; } void DoThat( std::string message ) { std::cout << message << std::endl; } }; // Class for example 4: overloaded class members class Overload { p...

Getting started with the Boost libraries in Cygwin

Image
This post assumes that the boost libraries have been downloaded and extracted to the directory of your choice. See this previous posting for more details on how to download and extract the Boost libraries. Open Cygwin and cd to the location where your Boost libraries have been installed. For Windows directories with white spaces please enclose it in quotes, eg: $ cd "C:\Program Files\boost_1_46_1" Check to see that the boost/ folder lives at this location using $ ls : If so, run the bootstrap: $ ./bootstrap.sh –prefix=boost/ Then run the bjam executable (takes a while) $ ./bjam And run bjam installer (takes a very long while): $ ./bjam install After this has completed you will find that within the boost/ folder, three other folders have been created, namely bin , include and lib . Recursively copy these 3 folders to the /usr/local/ destination: $ cp -r boost/bin /usr/local/ $ cp -r boost/include /usr/local/ $ cp -r boost/lib /usr/local/ ...

Using boost::bind as an improved means of calling member functions

This post takes a look at using boost::bind as a means of calling class member functions in an efficient and generic way. It basically summarizes what has already been said at Björn Karlsson's excellent Informit article . Since I found the post useful, I thought it worth reproducing here, using the same status class but containing all the examples and approaches he describes in one program.

Getting started with the Boost libraries in Ubuntu Linux

1. Install the Boost libraries from the command line First try the following $ sudo apt-get install libboost* You may get an error message similar to the following, like I did: