C++ 我自己的 class 谓词不起作用

C++ my own class predicate is not working

我是 C++ 的新手。我想创建自己的谓词。但是 bool 运算符的部分似乎是错误的(至少在我看来是这样)。有人可以给我提示吗?我不想改变这个想法的整体结构,我只是确定我不了解有关 operator () 实现的一些细节或与 c++ 中的 类 相关的内容。

#include <iostream>
#include <vector>

class Predicate
{

private:
    int number = 0;

public:
    Predicate() = default;
    Predicate(const int number)
    {
        this->number = number;
    }
    bool operator()(int value) const
    {
        Predicate *pred = new Predicate();
        bool result = pred->operator()(value);
        return result;
    }
};

class Even : public Predicate
{
    bool operator()(int value) const
    {
        return value % 2 == 0;
    }
};

class Negative : public Predicate
{
    bool operator()(int value) const
    {
        return value < 0;
    }
};

int count(const std::vector<int> &elements, const Predicate &predicate)
{
    int count = 0;
    for (int index = 0; index < elements.size(); ++index)
    {
        if (predicate(elements[index]))
        {
            ++count;
        }
    }
    return count;
}

int main()
{
    const std::vector<int> elements{-7, 12, -11, 2, 9, -4, -6, 5, 23, -1};
    std::cout << count(elements, Even()) << " " << count(elements, Negative()) << std::endl;
}

您需要的是:

  • 定义Predicate为抽象类型,
  • 实现了它的不同版本。

Predicate 作为抽象类型:

class Predicate {
  public:
    virtual bool operator(int v) const = 0;
};

实施(实现)给定的 Predicate:

class IsNegative : public Predicate { // means IsNegatives are Predicates
  public:
    virtual bool operator(int v) const { return v<0; } // realisation of the operator
};