我想传递一个多态lambda函数,它将对不同数据类型执行某些操作(即delegate
或initialization
或==
等)。所以我想做这样的操作:
<=
稍后再执行以下操作:
<
但是不幸的是,不允许这样声明函数指针(参数类型为bool func(bool (* f)(auto a, auto b))
{
int a = 1, b = 2;
float c = 3, d = 4;
return f(a, b) || f(c, d);
}
)。我应该如何正确执行此操作?
答案 0 :(得分:6)
这很好用:
template<class F>
bool func(F f)
{
int a = 1, b = 2;
float c = 3, d = 4;
return f(a, b) || f(c, d);
}
int main()
{
func([](auto a, auto b) -> bool { return a == b; });
func([](auto a, auto b) -> bool { return a <= b; });
func([](auto a, auto b) -> bool { return a < b; });
}
答案 1 :(得分:2)
在函数参数中没有模板auto
关键字没有意义。
您可以将其作为模板或提供特定类型:
bool func(bool (* f)(int a, int b))
{
int a = 1, b = 2;
float c = 3, d = 4;
return f(a, b) || f(c, d);
}
template<class T>
bool func2(T f)
{
int a = 1, b = 2;
float c = 3, d = 4;
return f(a, b) || f(c, d);
}
…
func([](auto a, auto b) -> bool { return a <= b; });
func3([](auto a, auto b) -> bool { return a <= b; });
https://e-civic.coquitlam.ca/tempestprod/webinquiry/frames.cfm
答案 2 :(得分:1)
好的,我找到了答案。我更奇怪,但是func
函数也必须是这样的lambda函数:
auto func = [](auto f) -> bool
{
int a = 1, b = 2;
float c = 3, d = 4;
return f(a, b) || f(c, d);
};