背景
最近要写一个函数,支持用户自定义传入算法, 已知C++有三种方式可以传入算法:
- 函数指针
- lambda表达式
- 函数对象(实现operator()的类型
当我们定义一个函数指针类型FP的时候,只能传入函数指针和lambda表达式,为了兼容函数对象,映入function。
#include <iostream>
namespace {
int Add(int a, int b)
{
return a + b;
}
auto Mul = [](int a, int b){ return a-b;};
class Div
{
public:
int operator() (int a, int b)
{
return a/b;
}
};
Div div;
}//namespace
int main()
{
using FP = int(*)(int, int);//注意写法
FP op = Add;//right
//Fp op = Mul;//rigth
//Fp op = div;//error
std::cout << op(1,2) << std::endl;
return 0;
}
使用
#include <iostream>
#include <functional>
int main()
{
using FP = int(int, int);
std::function<FP> op;
FP op = Add;//right
//Fp op = Mul;//right
//Fp op = div;//right
std::cout << op(1,2) << std::endl;
return 0;
}