//
// Created by cuizhou on 18-9-13.
//
#include <iostream>
#include <functional>
using namespace std;
void printA(int a){
cout << a << endl;
}
void printB(int a, int b){
cout << a << " " << b << endl;
}
template <typename T>
void printT(T t){
cout << t << endl;
}
class Print{
public:
static void print1(int a){cout << a << endl;}
void print2(int a){cout << a << endl;}
void print3(int a, int b){cout << a << " " << b << endl;}
};
template <typename T>
class PrintT{
public:
static void printT1(T t){cout << t << endl;}
void printT2(T t){cout << t << endl;}
};
void test_std_function(){
// old way to use
typedef void (*F)(int);
F func1 = printA; // normal function
func1(1);
func1 = [](int a){printA(a);}; // lambda
func1(2);
func1 = (&Print::print1); // static class member function
func1(3);
Print p = Print(); // static class member function
func1 = (p.print1);
func1(4);
func1 = printT<int>; // template function
func1(5);
PrintT<int> pT = PrintT<int>(); // static template class member function
func1 = (pT.printT1);
func1 = &PrintT<int>::printT1;
func1(6);
// use std::fuction
std::function<void (int)> func2; // normal function
func2 = printA;
func2(7);
func2 = [](int a){printA(a);}; // lambda
func2(8);
func2 = (&Print::print1); // static class member function
func2(9);
func2 = (p.print1); // static class member function
func2(10);
func2 = printT<int>; // template function
func2(11);
func2 = pT.printT1; // static template class member function
func2 = &PrintT<int>::printT1;
func2(12);
// std::bind
func2 = std::bind(&Print::print2, &p, placeholders::_1); // non-static class member function
func2(13);
func2 = std::bind(&PrintT<int>::printT2, &pT, placeholders::_1); // non-static template class member function
func2(14);
auto func3 = std::bind(&Print::print3, &p, placeholders::_1, placeholders::_2);
func3(15,16);
auto func4 = std::bind(printB, placeholders::_1, placeholders::_2);
func4(17,18);
auto func5 = std::bind(printB, 19, placeholders::_1);
func5(20);
}
int main(){
test_std_function();
}
std::function函数 与std::bind
最新推荐文章于 2024-05-16 08:00:00 发布