什么是仿函数
仿函数即为函数对象,一个能使用函数功能的类主要实现是通过operator()运算符达到调用函数的效果。
代码示例
#include <iostream>
#include<functional>
class FunctionBase {
public:
FunctionBase() {};
~FunctionBase() {};
virtual int operator()() = 0;
};
template<class _TX,class... _Types>
class Function :public FunctionBase {
public:
Function(_TX _FUNC, _Types... _Args)
:m_binder(std::forward<_TX>(_FUNC),std::forward<_Types>(_Args)...) {};
~Function() {};
virtual int operator()() {
return m_binder();
}
private:
std::_Binder<int, _TX, _Types...> m_binder;
};
该代码实现了不定参数函数模板的仿函数。通过std::_Binder还原成函数,在重载()达到调用函数效果。
使用示例
void fun(int x,int y) {
printf("x=%d,y=%d\r\n", x, y);
}
class CreateFunction {
public:
template<class _TX,class... _Types>
CreateFunction(_TX func, _Types... args)
:m_pFunction(new Function<_TX,_Types...>(func,args...))
{}
~CreateFunction() {};
void start() {
(*m_pFunction)();
}
private:
FunctionBase* m_pFunction;
};
int main() {
CreateFunction test1(&fun, 10, 20);
test1.start();
}
首先准备了一个要是使用的函数fun
准备了一个辅助类来初始化Fuction
提供了一个开始功能
此写法主要用在线程池中。创建线程由于CreateThread需要入口函数和参数列表而我们使用线程时函数和参数不固定则可以使用不定参数函数模板。