// ConsoleApplication18.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include<vector>
#include<functional>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
int add(const int& a, const int& b)
{
return a + b;
}
int sub(const int& a, const int& b)
{
return a - b;
}
struct Mulitiply {
int operator()(const int& a, const int& b)
{
return a - b;
}
};
int my_process(const int& a, const int& b, decltype(add) f)
{
return f(a, b);
}
int main()
{
//函数指针的调用方式
cout << my_process(2, 1, sub)<<endl;
auto ad = add;
auto mod = [](const int& a, const int& b) {return a % b; };
// 定义 cc变量名的函数
int (*cc)(const int& a, const int& b) = sub;
cout << my_process(3, 3, ad)<<endl;
cout << my_process(3, 3, cc) << endl;
// 这时候 可调用的函数对象是无法使用的,包括lambda表达式类型
// 使用函数表
function<int(const int&, const int&)> fa;
fa = add; // 函数
fa = sub; // 函数
fa = cc; // 函数指针
// key 返回值 参数列表
map < string, function<int(const int&, const int&) >> mapfuncItem;
mapfuncItem.emplace("+", add);
mapfuncItem.emplace("-", std::minus<int>());
mapfuncItem.emplace("*", Mulitiply());
mapfuncItem.emplace("/", [](const int& a, const int& b) {return a / b; });
mapfuncItem.emplace("%", mod);
auto funproc = [](const int& a, const int& b, function<int(const int&, const int&)> f) {
return f(a, b);
};
cout << "Function 调用 + :" << funproc(12, 14, mapfuncItem["+"]);
cout << "Function 调用 - :" << funproc(12, 14, mapfuncItem["-"]);
cout << "Function 调用 * :" << funproc(12, 14, mapfuncItem["*"]);
cout << "Function 调用 / :" << funproc(12, 14, mapfuncItem["/"]);
cout << "Function 调用 % :" << funproc(12, 14, mapfuncItem["%"]);
}
C++ lambda 和 函数对象
C++函数对象
最新推荐文章于 2025-03-13 14:45:55 发布
本文介绍了一个C++程序中如何使用函数对象、lambda表达式及函数指针进行操作,并通过具体的代码示例展示了如何利用这些特性实现灵活的运算处理。

2401

被折叠的 条评论
为什么被折叠?



