0

我没有使用 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 的第二个参数。

4

1 回答 1

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);

说了这么多,你最好定义isSamestaticfree-function

bool isSame(FileId f1, FileId f2){ ... }

std::bind1st(std::ptr_fun(&isSame), f);
于 2012-06-19T02:05:36.223 回答