#include <algorithm>
#include <map>
#include <iostream>
#include "boost/bind.hpp"
using namespace std;
void printPair(const pair<int, int>& elem)
{
cout << elem.first << "->" << elem.second << endl;
}
class Test {
public:
Test() {
myMap.insert(make_pair(4, 40));
myMap.insert(make_pair(5, 50));
myMap.insert(make_pair(6, 60));
myMap.insert(make_pair(7, 70));
myMap.insert(make_pair(8, 80));
}
void printResult() {
int a = 10;
//using static method with two argument
for_each(myMap.begin(), myMap.end(), boost::bind(&Test::printPair, _1, a));
//using static method with one argument
for_each(myMap.begin(), myMap.end(), boost::bind(&Test::printPair2, _1));
//using instance method
for_each(myMap.begin(), myMap.end(), boost::bind(&Test::printPair3, boost::ref(*this), _1));
}
static void printPair(const pair<int, int>& elem, int a)
{
cout << elem.first << "->" << elem.second << ";a=" << a << endl;
}
static void printPair2(const pair<int, int>& elem)
{
cout << elem.first << "2->" << elem.second << endl;
}
void printPair3(const pair<int, int>& elem)
{
cout << elem.first << "3->" << elem.second << endl;
}
private:
map<int, int> myMap;
};
int f(int a, int b) {
return a - b;
}
int main(int argc, char** argv)
{
map<int, int> myMap;
myMap.insert(make_pair(4, 40));
myMap.insert(make_pair(5, 50));
myMap.insert(make_pair(6, 60));
myMap.insert(make_pair(7, 70));
myMap.insert(make_pair(8, 80));
for_each(myMap.begin(), myMap.end(), &printPair);
Test t;
t.printResult();
//using bind create a new method then call it with 1
int c = boost::bind(f, _1, 2)(1);
std::cout << "c:" << c << endl;
c = boost::bind(f, 10, _1)(1);
std::cout << "c:" << c << endl;
//exchange the argument
c = boost::bind(f, _2, _1)(1, 2);
std::cout << "c:" << c << endl;
return (0);
}