我没有使用boost库。我怎么能用STL做到这一点?
class Files
{
private:
bool isSame(FileID f1, FileId f2)
{
if(f1.getId()==f2.getId())
return true;
return false;
}
public:
vector<FileId> mod_files;
void update()
{
FildId f = getFileId();
vector<FildId>::const_iterator found = find_if(mod_files.begin(), mod_files.end(), ???);
}
};
我想将isSame作为find_if函数的第三个参数传递,并将“f”绑定到isSame的第二个参数。
答案 0 :(得分:4)
在 C ++ 11 中简单地说:
std::bind(&Files::isSame, this, f);
在旧的 C ++ 03 中,没有mem_fun
需要2个参数,所以你必须自己进行绑定:
class is_same_pred
{
public:
// unary function typedefs
explicit is_same_pred(Files& files, FileId f1) : _files(files), _f1(f1) {}
bool operator()(FileId f2) const { return _files.isSame(_f1, f2); }
private:
Files& _files;
FileId _f1;
};
isSame
可以访问is_same_pred
,以后可以像这样使用它:
is_same_pred(this, f);
所有这些说明和完成后,最好将isSame
定义为静态或自由功能:
bool isSame(FileId f1, FileId f2){ ... }
std::bind1st(std::ptr_fun(&isSame), f);