#include <iostream>
#include <functional>
//adapter测试
using namespace std::placeholders;
using std::cout;
using std::endl;
struct Functor : public std::binary_function<int, int, void> //比较标准的functor写法,在functional头文件中
//可以对应查一下这个的用法,一般是一个或者两个参数的functor才有
{
void operator()(int a, int b)
{
cout << "Functor" << endl;
}
};
void Function(){cout << "function" << endl;}
class MyClass //注意要被绑定的话必须是public,不然无法访问
{
public:
void Print(int a){ cout << "Print: " << a << endl;}
void Data() { cout << "data: " << data << endl;}
public: //
int data;
};
int main()
{
auto lambda = [](int x, int y) { cout << x << y << endl; };
//bind 的几种用法
auto fun1 = std::bind(lambda, _1, _2);
fun1(1, 2);
auto fun2 = std::bind<double>([](int x, int y)->double { cout << x << y << endl; }, _1, _2); //模板参数指的是返回值的类型
fun2(1, 5);
auto fun3 = std::bind(Functor(), _1, _2);
fun3(3, 3);
auto fun4 = std::bind(Function);
fun4();
MyClass c;
auto fun5 = std::bind(&MyClass::Print, _2, _1); //这个还是先要指定对象, 不指定的话留个占位符等待等会传入某个对象(这个对象地不地址的都无所谓)
fun5(555, c);
auto fun6 = std::bind(&MyClass::Data, c);
fun6();
auto fun7 =std::bind(&MyClass::data, _1); //绑定数据成员的意思是返回该数据成员
std::cin.get();
}
std::bind的几种用法
最新推荐文章于 2024-05-09 23:31:00 发布