A First Stab at boost::bind

Boost::bind is “able to bind any argument to a specific value or route input arguments into arbitrary positions.” It's a means of converting a function into an object that can be copied around and called at a later point, deferred callbacks for example. An example of its power becomes evident when combined with its overloads for operator== so that you can combine with find_if (or copy_if, remove_if, etc) to call any member function of a class in a container.  See here for setting up Boost in Visual Studio environments. [code language="cpp"] #include <vector> #include <sstream> #include <algorithm> #include "boost/bind.hpp" class Record { public: Record() {} Record( std::string nm, int age_val ) { name = nm; age = age_val; } std::string GetName() const { return name; } unsigned int GetAge() const { return age; } private: std::string name; unsigned int age; }; struct DataRec { std::string name; int age; }; typedef DataRec data; void main() { // Set up some data data dat[] = { { "Andrew", 10 }, { "Mark", 20 }, { "John", 30 }, { "Mike", 40 } }; // Add some records std::vector< Record* > rec; int Recs = sizeof( dat ) / sizeof( dat[ 0 ] ); for ( int count = 0; count < Recs; count++ ) { rec.push_back( new Record( dat[ count ].name, dat[ count ].age ) ); } // Find the record matching the given string std::vector< Record* >::iterator it; it = std::find_if( rec.begin(), rec.end(), boost::bind( &Record::GetName, _1 ) == "Mike"); int age = (*it)->GetAge(); // and don't forget to delete of course... } [/code]

Comments

Popular posts from this blog

Using the Supervisor Controller Pattern to access View controls in MVVM

Getting started with Tesseract optical character recognition (OCR) library in Visual Studio

How to send an e-mail via Google SMTP using C#