创建二进制函数数组

时间:2013-11-20 14:43:08

标签: c++

为什么这个陈述不合法?

typedef std::binary_function <double, double, bool> BF;

BF checks[] = { &less<double>, &less_equal<double> };

3 个答案:

答案 0 :(得分:3)

lessless_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::lessstd::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_functionless<double>都是对象。因此,如果您创建一个std::binary_function数组,则应该存储对象。

less<double>是一种类型。所以&less<double>意味着什么