将类实例和方法作为参数传递给C ++中的另一个函数

时间:2018-02-13 02:02:16

标签: c++ function pointers

我有两节课。一个类有一个方法,它接受一个函数作为参数,并且传递函数应该有一个字符串作为参数。例如:

class Dog{
public:
    void doDogThings(std::function <void(std::string)> theFunction);

}

class Cat{
public:
    void doCatThings(std::string stringInput);
}

这里他们正在行动

int main(){
   Cat aCat;
   Dog aDog;
   std::string theString = "Oh jeez";
   aDog.doDogThings(<< insert cat's method and argument here >>);
   .....

这是在这里弄脏我的部分;我知道我应该使用

bind(&Cat::doCatThings, ref(aCat) ....?.....);

但我仍然坚持如何将Cat方法的参数作为参数传递给此函数指针。 任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

正确的bind语法是:

aDog.doDogThings(std::bind(
    &Cat::doCatThings, std::ref(aCat), std::placeholders::_1));

&#34;占位符&#34; _1表示&#34;生成的仿函数的第一个参数将在此处用于传递给绑定的可调用&#34;。

但我几乎不建议在任何情况下都使用std::bind。它有一些讨厌的陷阱,在你编写使用它之后再次阅读通常很难解读,并且在你出现稍微错误的时候会导致最糟糕的编译错误。 Lambda可以做std::bind可以做的任何事情,而且可以做更多,没有大多数问题。

相反,我建议:

aDog.doDogThings(
    [&aCat](std::string stringInput)
    { aCat.doCatThings(std::move(stringInput)); }
);