C++ 将函数传递给函数

标签 c++ function-pointers

我有 类函数Find。该函数必须接受一些变量,有时(指向)另一个将在内部使用的函数。我该如何声明?

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/

相关文章:

c++ - 带有 PNG/Alpha channel 图像的图像列表

c++ - 传递指针 vector 的指针......不不?

c++ - 如何创建一个充满 C 风格函数指针和 lambda 的 vector (有和没有捕获)

python - 在 Python 中注册要在事件上调用的函数

c++ - 将函数作为参数传递时出现错误 LNK2019 "unresolved external symbol"

c++ - 32 位指针(在 32 位计算机上)如何查找 1 TB 硬盘中的数据?

c++ - 为什么 if ... else if ... else 有共同的作用域? last else 的共同作用域是什么?

python - Python 中基于事件处理程序、事件、委托(delegate)的编程有什么例子会很感激吗?

c++ - Google Protocol Buffers - 对 encode decode base64 char * c string Protocol Buffer 数据感到困惑

c - 为什么使用回调而不是普通的函数调用?