【发布时间】:2018-07-14 16:56:09
【问题描述】:
我想传递一个多态 lambda 函数,该函数将对不同的数据类型执行某些操作(即 == 或 <= 或 < 等)。所以我想做这样的操作:
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);
}
稍后像这样执行它:
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; });
但不幸的是,不允许以这种方式声明函数指针(带有auto 类型的参数)。我应该如何正确地做到这一点?
【问题讨论】:
-
使用模板,带有任意函子而不是专门的指针。
-
@o11c 这并没有解决根本问题。
-
@Sneftel:它处理能够将函数传递给其他函数的问题。而如果
func真正采用这些概念性的auto参数,那么func已经是一个模板