0

ブースト ライブラリは使用していません。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(),          ???);
    }

};

find_if 関数の 3 番目の引数として isSame を渡し、isSame の 2 番目の引数に "f" をバインドします。

4

1 に答える 1

4

C++11 では、単純に次のようになります。

std::bind(&Files::isSame, this, f);

古き良きC++03 では、2 つの引数を取るno がないmem_funため、自分でバインディングを行う必要があります。

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

以上のことから、 staticまたはfree-functionisSameとして定義する方がよいでしょう:

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

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