gpt4 book ai didi

c++将函数传递给函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:35 25 4
gpt4 key购买 nike

我有类函数查找。这个函数必须接受一些变量,有时(指向)另一个将在内部使用的函数。我应该如何申报?

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"; } );

(函数返回 bool 值)

(本例中的_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 方法特别复杂,则不会导致代码爆炸。

关于c++将函数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37082258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com