我有两节课。一个类有一个方法,它接受一个函数作为参数,并且传递函数应该有一个字符串作为参数。例如:
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方法的参数作为参数传递给此函数指针。 任何帮助将不胜感激。感谢。
答案 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)); }
);