我有这个方法标题:
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()
功能(如果可能的话),这样我就不会有重复的代码。
答案 0 :(得分:2)
您需要指明要将alwaystrue
用作默认值的实例,即alwaystrue<E>
:
template <typename T, typename E>
void Find(const T& v, int max,
const std::function<bool(const E&)>& filter = alwaystrue<E>);