【发布时间】:2018-09-18 21:40:34
【问题描述】:
我试图将一个类的非静态成员函数作为参数传递给另一个接受函数引用的成员函数。我目前拥有的代码可以说明为:
bool someClass::baseFunction( unsigned argument, bool (&argumentFunction)(unsigned) ) const{
...
... use argumentFunction(argument) somehow...
...
}
bool someClass::anotherFunction(unsigned) const{
...
}
bool someClass::finalFunction(unsigned argument) const{
return baseFunction(argument, anotherFunction);
}
但是这样会提示编译错误
"invalid use of non-static member function"
,我理解这是因为我在“finalFunction”中作为参数传递的函数是非静态的。但是,还有其他方法可以在我在这里显示的代码中将非静态成员函数作为参数传递吗?
【问题讨论】:
-
您希望在哪个对象上调用成员函数?
-
指向(非静态)成员函数的指针不与指向非成员函数的指针相同。即使老实说我不知道对函数的引用,也从未使用过它们(指针很常见),但引用应该是相同的。要么像标准库那样使用模板,要么将
std::function与std::bind或lambda expressions 一起使用。 -
是否需要支持传入的任何函数,或者只是
someClass的其他成员? -
我只需要对“someClass”成员的支持,并且我只想传递调用 finalFunction 的对象的成员函数。
-
你不能把非静态成员函数当作普通函数,因为它们需要绑定到一个对象。传递 lambda 或 std::function
标签: c++ class pass-by-reference