c ++将函数传递给函数
c++ passing function to function
我有
class 功能查找。这个函数必须接受一些变量,有时(指向)另一个将在内部使用的函数。我应该如何申报?
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"; } );
(函数 returns 布尔值)
(本例中的_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 方法特别复杂,则不会导致代码爆炸。
我有 class 功能查找。这个函数必须接受一些变量,有时(指向)另一个将在内部使用的函数。我应该如何申报?
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"; } );
(函数 returns 布尔值)
(本例中的_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 方法特别复杂,则不会导致代码爆炸。