language: C++11 (gcc-4.7.2)
date: 763 days 14 hours ago
link:
visibility: private
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <functional>
#include <iostream>
 
int main(){
  using namespace std;
  using namespace placeholders;
  // no argument binding, both are equivalent, both return opposite of input
  auto neg_lambda = [](bool b){ return !b; };
  // could do:
//function<bool(bool)> neg_func = neg_lambda;
  function<bool(bool)> neg_func = [](bool b){ return !b; };
 
  // with argument binding, always returns true
  // could do:
//function<bool()> true_func(bind(neg_func,false));
  function<bool()> true_func(bind(neg_lambda,false));
 
  cout << boolalpha << "booleans:\n";
 
  cout << "unbound...\n\t"
       << neg_lambda(true) << "\n\t"
       << neg_func(true) << "\n"
       << "bound...\n\t"
       << true_func() << "\n";
 
  // more complicated, will add the parameters
  auto add_lambda = [](int a, int b){ return a+b; };
  // could do:
//function<int(int,int)> add_func = add_lambda;
  function<int(int,int)> add_func = [](int a, int b){ return a+b; };
 
  // with argument binding, always adds 5
  // could do:
//function<int(int)> add5_func(bind(add_func,5,_1));
  function<int(int)> add5_func(bind(add_lambda,5,_1));
 
  cout << "additions:\n\t"
       << add_lambda(10,20) << "\n\t"
       << add_func(10,20) << "\n"
       << "add 5:\n\t"
       << add5_func(7);
}