0
点赞
收藏
分享

微信扫一扫

std::function使用介绍

介绍

类模板std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标尸体进行存储、复制和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针以及其它函数对象等。std::function对象是对C++中国呢现有的可调用实体的一种类型安全的包裹(std::function就是对标函数指针类型不安全的可调用实体而实现的)。

封装普通函数例子

#ifndef TEST_H
#define TEST_H

#include <iostream>
#include <functional>
int add(int a, int b);
#endif

#include "test.h"
std::function<int(int, int)> func = add;
std::function<int(int, int)> func1 = [](int a, int b) {return a+b;};

int main()
{
	std::cout << "func(1, 2): " << func(1, 2) << std::endl;
	std::cout << "func1(4, 5): " << func1(4, 5) << std::endl;
	return 0;
}#endif

封装仿函数例子

#ifndef TEST_H
#define TEST_H

#include <iostream>
#include <functional>
typedef std::function<int(int)> Functornal;

class Functor{
public:
    int operator()(int a) {
        return a;
    }
};
#endif
#include "test.h"
int main()
{	
	//1.1 fucntor
	Functor func;
	Functornal fobj = func;
	int fres = fobj(3);
	std::cout << "functor fres: " << fres << std::endl;
	
	return 0;
}

封装类成员函数和类静态成员函数例子

#ifndef TEST_H
#define TEST_H

#include <iostream>
#include <functional>

typedef std::function<int(int, int)> Functional;
typedef std::function<const char*(const char*)> SFunctional;

class CTest{
public:
    int Func(int a, int b) {
        return a+b;
    }
    static const char *S_Func(const char* s) {
        return s;
    }

};
#endif
#include "test.h"
int main()
{
	//1.2 bind 
	CTest t;
	Functional obj = std::bind(&CTest::Func, &t, std::placeholders::_2, std::placeholders::_2);
	int res = obj(3,5);
	std::cout << "member function: " << res << std::endl;
	//1.3 static bind
	SFunctional sobj = std::bind(&CTest::S_Func, std::placeholders::_1);
	const char* sres = sobj("nihao");
	std::cout << "member function1: " << sres << std::endl;
	//1.4 common function use
	SFunctional sobj1 = CTest::S_Func;
	const char* sres1 = sobj1("hello world.");
	std::cout << "member function2: " << sres1 << std::endl;
	return 0;
}
举报

相关推荐

0 条评论