将3个函子组合成1个

combining 3 functors into 1

本文关键字:1个 组合 3个      更新时间:2023-10-16

我有3个函子,想知道这些是否可以组合成1,也许作为模板。这可能吗?如果有,我该怎么做呢?谢谢!

    struct less_than
    {
    bool operator()(double prev,double curr) const
    {
    return prev<curr;
    }
    };
    struct great_than
    {
    bool operator()(double prev,double curr) const
    {
    return prev>curr;
    }
    };
    struct equal_to
    {
    bool operator()(double prev, double curr) const
    {
    return prev==curr;
    }
    };

如果您的意思是由操作符专门化,那么答案是,不,不是在语言级别

幸运的是,STL已经为此提供了函子(std::equal_to等)。您既可以直接使用它们,也可以将它们用作您自己的函数类的参数。

由于这些都存在于标准库中,因此您只需执行

template<class F>
struct compare
{
    compare(F _f)
        : f(_f) {};
    bool operator()(double prev, double curr) const
    {
        return f(prev, curr);
    }
    F f;
};

并使用例如compare< std::less<double> >。但是这将是非常无用的,因为您可以直接使用标准库函数。

你可以这样做:

class Functors
{
private:
bool f1(double, double)
{
}
bool f2(double, double)
{
}
bool f3(double, double)
{
}
public:
bool test(int op, double a, double b)
{
//better use function selector, this is only simple example
 if (op == 1)
  return f1(a, b);
 if (op == 2)
  return f2(a, b);
 if (op == 3)
  return f3(a, b);
}
};

使用它:

vector<double> v;
int op = select_op();
//sort vector
std::sort(v.begin(), v.end(), boost::bind(&Functors::test, Functors(), op, _1, _2));