我有上课查找功能。该函数必须接受一些变量,有时(指向)另一个函数,该变量将在内部使用。我该怎么声明呢?
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是字符串)
您可以定义一个采用任何可调用对象的模板方法(该对象将支持具有捕获功能的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] 删除。
我来说两句