gpt4 book ai didi

c++ - std::function 以函数作为默认参数

转载 作者:行者123 更新时间:2023-11-28 01:34:17 24 4
gpt4 key购买 nike

我有这个方法头:

void Find(const _T & v, int max, const function<bool(const _E &)> & filter)

我正在使用 std::function 因为我需要接受函数指针、仿函数或 lambda 表达式。我希望过滤器是可选的,并且默认为始终返回 true(没有过滤掉任何内容)的函数作为默认参数。我试过这样的事情:

#include <functional>

template <typename E>
bool alwaystrue(const E & e){ return true; }

template <typename T, typename E>
void Find(const T & v, int max,
const std::function<bool(const E &)> & filter = alwaystrue);

int main()
{
Find<int, int>(1, 2);
}

但这不能编译:

50016981.cpp: In function ‘void Find(const T&, int, const std::function<bool(const E&)>&) [with T = int; E = int]’:
50016981.cpp:11:24: error: cannot resolve overloaded function ‘alwaystrue’ based on conversion to type ‘const std::function<bool(const int&)>&’
Find<int, int>(1, 2);
^

我也试过在我的类中使用该函数,但遇到了类似的错误。

std::function 与模板结合使用是否有问题?如果是这样,你能建议如何做我想做的事吗?我想避免重载 Find() 函数(如果可能的话),这样我就没有重复的代码。

最佳答案

您需要指出 alwaystrue 的哪个实例化你想使用默认值,即 alwaystrue<E> :

template <typename T, typename E>
void Find(const T& v, int max,
const std::function<bool(const E&)>& filter = alwaystrue<E>);

关于c++ - std::function 以函数作为默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50016981/

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