为什么这个陈述不合法?
typedef std::binary_function <double, double, bool> BF;
BF checks[] = { &less<double>, &less_equal<double> };
答案 0 :(得分:3)
less
和less_equal
都有一个模板参数而不是两个。它们是类型而不是对象,您应该传递对象,看看我如何使用()
从这些类型中创建对象。此外,您应该使用using
代替typedef
作为模板类型。
using BF = std::binary_function <double, double, bool>;
BF checks[] = { less<double>(), less_equal<double>() };
^^ ^^
{@ 1}}已弃用,您可以改为使用std::binary_function
:
std::function
答案 1 :(得分:2)
std::less
和std::less_equal
不是函数,而是函数对象。您需要创建一个实例,例如:
std::binary_function<double, double, bool> checks[] = { less<double>() };
还要记住,自C ++ 11以来,std::binary_function
已被弃用。相反,您应该使用std::function
,例如:
std::function<bool(double, double)> checks[] = { less<double>() };
答案 2 :(得分:0)
std::binary_function
和less<double>
都是对象。因此,如果您创建一个std::binary_function
数组,则应该存储对象。
less<double>
是一种类型。所以&less<double>
意味着什么