您可以将您的函数设为模板,并让它接受任何返回bool
. 例如:
template<typename P>
void doSomething(P&& p)
{
while (p())
{
something();
}
}
这就是您可以通过传递 lambda 来调用它的方式,例如:
int main()
{
// Possibly pass a more clever lambda here...
doSomething([] () { return true; });
}
当然,您可以传递一个常规函子而不是 lambda:
struct my_functor
{
// Possibly write a more clever call operator here...
bool operator () ()
{
return true;
}
};
int main()
{
doSomething(my_functor());
}
函数指针也是一种选择:
// Possibly use a more clever function than this one...
bool my_predicate()
{
return true;
}
int main()
{
doSomething(my_predicate);
}
如果你有理由不让你的函数成为模板(例如,因为它是virtual
某个类的成员函数),你可以使用std::function
:
void doSomething(std::function<bool()> p)
{
while (p())
{
something();
}
}
std::function
上面的所有示例都可以与 .