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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#include <functional> #include <iostream> struct Foo { Foo(int num) : num_(num) {} void print_num(int i) const { std::cout << "num_:" << num_ << ", i:" << i << std::endl; } int num_; }; struct PrintNum { void operator()(int i) const { std::cout << i << std::endl; } static void print_num(int i , int a) { std::cout << i << "," << a << std::endl; } }; void print_num(int i) { std::cout << i << std::endl; } void print_num2(int i, int a) { std::cout << i << "," << a << std::endl; } template <int T_SIZE> void print_num3(int i, int a) { std::cout << i << "," << a << ", T_SIZE:" << T_SIZE << std::endl; } void print_num4() { std::cout << "print_num4" << std::endl; } int main() { std::function<void(int)> FuncFree1 = print_num; FuncFree1(101); std::function<void(int, int)> FuncFree2 = print_num2; FuncFree2(102, 1021); std::function<void(int, int)> FuncFree3 = print_num3<102333>; FuncFree3(103, 1031); std::function<void(int, int)> FuncFree4 = PrintNum::print_num; FuncFree4(104, 1041); std::function<void()> FuncFree5 = print_num4; FuncFree5(); std::function<void()> FuncLambda1 = []() { print_num(201); }; FuncLambda1(); std::function<void(int)> FuncLambda2 = [](int iNum) { print_num(iNum); }; FuncLambda2(202); std::function<void(const Foo&, int)> FuncFunc = &Foo::print_num; const Foo xFoo3(300); FuncFunc(xFoo3, 3011); FuncFunc(302, 3021); Foo xFoo4(400); std::function<int(Foo const&)> FuncData = &Foo::num_; std::cout << "num_:" << FuncData(xFoo4) << std::endl; std::function<void()> FuncBind1 = std::bind(print_num, 501); FuncBind1(); Foo xFoo6(600); std::function<void(int)> FuncObject = std::bind(&Foo::print_num, xFoo6, std::placeholders::_1); FuncObject(601); Foo xFoo7(700); std::function<void(int)> FuncPointer = std::bind(&Foo::print_num, &xFoo7, std::placeholders::_1); FuncPointer(701); std::function<void(int)> FuncOperator = PrintNum(); FuncOperator(801); }
|