定义需要绑定参数的函数:
#include <iostream>
#include <vector>
#include <functional>
#include <cstring>
using namespace std
;
using namespace std
::placeholders
;
bool valid(const wstring
&str
, int nSize
)
{
return str
.size() > nSize
? true : false;
}
bool verify(const wstring
& str
, function
<bool(const wstring
&, int)> compare
)
{
return compare(str
, 1);
}
bool get_valid_string(const wstring
& strVal
, function
<bool(const wstring
&, int)> compare
, wstring
&strResult
)
{
if (compare(strVal
, 1))
{
strResult
= strVal
;
return true;
}
return false;
}
绑定参数、函数调用:
wstring
strVal(L
"test");
auto valid_func
= bind(valid
, _1
, 10);
bool bValid
= valid_func(strVal
);
auto verify_func
= bind(verify
, _1
, _2
);
bool bPass
= verify_func(strVal
, valid
);
wstring strResult
;
get_valid_string(strVal
, valid
, strResult
);
wstring strRet1
;
auto get_valid1
= bind(get_valid_string
, strVal
, valid
, _3
);
get_valid1(ref(strVal
), valid(strVal
, 2), strRet1
);
wstring strRet2
;
auto get_valid2
= bind(get_valid_string
, _3
, valid
, _1
);
get_valid2(strRet2
, valid(strVal
, 2), ref(strVal
));
注意ref 、&及占位符的使用 标准库中旧版本的 bind1st ,bind2nd 分别绑定函数的第一个参数、第二个参数,无法绑定更多的参数
补充: std:function和std::bind https://www.jianshu.com/p/f191e88dcc80