Home > Software design >  How to understand this std::bind usage
How to understand this std::bind usage

Time:08-13

I am trying to understand this usage of std::bind(). For this example:

std::bind(&TrtNodeValidator::IsTensorRTCandidate, &validator, std::placeholders::_1)

They are trying to bind the function TrtNodeValidator::IsTensorRTCandidate(). However, according to the definition of this API:

Status TrtNodeValidator::IsTensorRTCandidate(const Node* node);

It only accepts one parameter. Why do they still need &validator when there exits std::placeholders::_1?

CodePudding user response:

TrtNodeValidator::IsTensorRTCandidate() is a non-static member function.

Aside from its explicit parameters, it requires a TrtNodeValidator* to become its implicit this parameter.

This usage:

std::bind(&TrtNodeValidator::IsTensorRTCandidate, &validator, 
          std::placeholders::_1)

will produce a callable object that then calls:

(&validator)->IsTensorRTCandidate(std::placeholders::_1)
  •  Tags:  
  • c
  • Related