1.std::function 作为函数,函数对象,函数指针和成员函数的包装器 #include <functional>
- 普通函数
void Test()
{
printf("Test Call\n");
}
... ...
std::function<void()> pfnTest = Test;
pfnTest();
- 成员函数:需要申明对象,并bind绑定
#ifndef _FUNCTIONBIND_H__
#define _FUNCTIONBIND_H__
#include <functional>
class CFunctionBind
{
private:
std::function<void()> m_pfnCallBack;
public:
void Function()
{
printf("Function Call\n");
if (nullptr != m_pfnCallBack)
{
m_pfnCallBack();
}
}
void SetCallBack(std::function<void()>& pfnCallBack)
{
m_pfnCallBack = pfnCallBack;
}
public:
CFunctionBind() :m_pfnCallBack(nullptr) {};
~CFunctionBind() = default;
};
#endif /*_FUNCTIONBIND_H__*/
... ...
CFunctionBind objFunctionBind;
std::function<void()> pfnFunction = std::bind(&CFunctionBind::Function, objFunctionBind);
//auto pfnFunction = std::bind(&CFunctionBind::Function, objFunctionBind);/*auto*/
pfnFunction();
- 函数指针:用回调函数说明
#ifndef _FUNCTIONBIND_H__
#define _FUNCTIONBIND_H__
#include <functional>
class CFunctionBind
{
private:
std::function<void()> m_pfnCallBack;
public:
void Function()
{
printf("Function Call\n");
if (nullptr != m_pfnCallBack)
{
m_pfnCallBack();
}
}
void SetCallBack(std::function<void()>& pfnCallBack)
{
m_pfnCallBack = pfnCallBack;
}
public:
CFunctionBind() :m_pfnCallBack(nullptr) {};
~CFunctionBind() = default;
};
#endif /*_FUNCTIONBIND_H__*/
... ...
std::function<void()> pfnCallBack = CallBack;
objFunctionBind.SetCallBack(pfnCallBack);
objFunctionBind.Function();
- 函数入参:在外面改变内部函数的行为,