C ++将函数传递给函数

德米特里

我有上课查找功能。该函数必须接受一些变量,有时(指向)另一个函数,该变量将在内部使用。我该怎么声明呢?

class CRoute
{
...
list<_T> Find(_T u1, _T u2, ????){
   if (????) {...}
}
...
}

必须接受:

X.Find ( "Wien", "Berlin" );
X.Find ( "Wien", "Munchen", TrainFilterCompany ( set<string> { "CD", "DB" } ) );
X.Find ( "Wien", "Munchen", TrainFilterSpeed ( 120, 200 ) );
X.Find ( "Wien", "Munchen", [] ( const CTrain & x ) { return x . m_Company == "CD"; } );

(功能返回布尔)

(在这种情况下,_T是字符串)

丹尼尔·谢普勒(Daniel Schepler)

您可以定义一个采用任何可调用对象的模板方法(该对象将支持具有捕获功能的lambda并传递对外部函数的引用):

template <typename Filter>
list<_T> Find(_T u1, _T u2, Filter filter) {
    if (filter(obj)) ...
}

// Overload taking no filter and returning everything
list<_T> Find(_T u1, _T u2) {
    return Find(u1, u2, [](const CTrain&) -> bool { return true; });
}

您也可以使用std::function<bool (const CTrain&)>传入可调用对象时,这将导致动态分配的少量开销,但是如果Find方法特别复杂,则不会导致代码爆炸。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章