设为首页 加入收藏

TOP

C++基础3(八)
2023-07-23 13:36:47 】 浏览:195
Tags:基础
destructor 析构函数: destroys a std::function instance
operator= 给定义的function对象赋值
operator bool 检查定义的function对象是否包含一个有效的对象
operator() 调用一个对象

含模板

template <typename T>
int a(T t) {
	return 1;
}

int main()
{
	function<int(int)> f = a<int>;
	f(1);
}

调用类成员函数

无模板

传入参数时使用User和User&都可以,这里不理解,如果您知道原因还请不吝赐教

class User {
public:
	double a(int a) {
		return 1;
	}

};

int main()
{
	function<double(User&,int)> f=&User::a;
	function<double(User,int)> f2=&User::a;

	User u1;
	
	cout<<f(u1,10)<<endl;
	cout<<f2(u1,10) << endl;

}

含类模板

template <typename T>
class User {
public:
	int num;	
	void add(T t) {
	}
};


int main()
{
	function<void(User<int>, int)> f = &User<int>::add;

	User<int>* u = new User<int>();
	f(*u,10);
}

含函数模板

class User {
public:
	int num;	
	template <typename T>
	void add(T t) {
		cout << "芜湖";
	}
};

int main()
{
	function<void(User, int)> f = &User::add<int>;

	User* u=new User();
	f(*u,10);
}

调用类成员静态函数

无模板

和调用普通函数差不多

class User {
public:
	static double a(int a) {
		return 1;
	}

};

int main()
{
	function<double(int)> f=&User::a;
	function<double(int)> f2=User::a;
	
	cout<<f(10)<<endl;
	cout<<f2(10) << endl;
}

含类模板

template <typename T>
class User {
public:
	int num;	

	static char* add(T t) {
		cout << "芜湖";
		return NULL;
	}
};

int main()
{
	function<char*(int)> f = &User<int>::add;
	f(100);
}

含函数模板

class User {
public:
	int num;	
	template <typename T>
	static char* add(T t) {
		cout << "芜湖";
		return NULL;
	}
};


int main()
{
	function<char*(int)> f = &User::add<int>;
	f(100);
}

调用类公共成员变量

无模板

class User {
public:
	int num;

};

int main()
{
	function<int(User)> f = &User::num;
	function<int(User&)> f2=&User::num;
	User u;
	u.num = 100;

	cout<<f(u)<<endl;
	cout<<f2(u) << endl;
}

含成员变量模板

template <typename T>
class User {
public:
	T num;	
};

int main()
{
	function<int(User<int>)> f = &User<int>::num;

	User<int> u{100};

	int a=f(u);
	cout << a << endl;

}

调用lambda

int main() {
	auto f = [](int a, int b) {
		return a + b;
	};
	std::function<int(int, int)>func = f;
	cout << func(1, 2) << endl;
}

通过bind函数调用类成员函数

无模板

class User {
public:
	int a(int b) {
		cout << "芜湖";
		return b;
	}
};


int main()
{
	User u;
	//通过指针调用
	function<int(int)> f = bind(&User::a, &u, placeholders::_1);
    //通过对象调用
	function<int(int)> f2 = bind(&User::a, u, placeholders::_1);

	f(1);
	f2(2);
}

placeholders::_1 是一个展位符,如果User::a存在两个形参,int a(int b,int c) 那么就需要在bind函数后面在添加一个placeholders::_2作为展位符

如果有更多参数的话以此类推就可以了

int a(int b,int c) {
		cout << "芜湖";
		return b;
}

function<int(int,int)> f = bind(&User::a, &u, placeholders::_1, placeholders::_2);
//如果需要更多形参,那么就往后面添加placeholders::_3   placeholders::_4......

存在模板

和不存在模板基本相同代码

template <typename T>
class User {
public:
	int a(T b,T c) {
		cout << &q
首页 上一页 5 6 7 8 下一页 尾页 8/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何通过C++ 将数据写入 Excel 工.. 下一篇我的第一篇随笔

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目