在 C++ 中重载向量上的括号运算符

Overloading parentheses operator on vector in c++

我已经尝试阅读此处的几个重载问题以了解如何做到这一点,但据我了解,重载括号与其他运算符不同,因为它需要在 class?

我的项目中有一个文件 main.cpp,我正在尝试重载 () 运算符,如下所示:

class vector<int> {
public:
    bool operator((iterator a);
};

具有匹配功能。

bool vector<int>::operator()(vector<int>::iterator a) {
    return (*a > 0);
}

但是我遇到了几个错误,第一个是:

an explicit specialization must be preceded by 'template <>' class vector {

我已经尝试更正错误的要求,但我对这个过程的理解似乎还不够好。

此处重载运算符的正确方法是什么?

提前感谢您的任何回复。

您没看错:operator()one of the four operators(连同 =[]->)只能实现为 class 成员。由于 std::vector 不是你的(无论是模板本身还是从它专门化的任何 class),你不能为它实现它们。

虽然还有一个解决方案,那就是将 std::vector 包装在您自己的 class 中,并为 that[=26 重载 operator() =]:

struct callableIntVector : std::vector<int> {
    using std::vector<int>::vector;

    bool operator ()(std::vector<int>::iterator a) const {
        return *a > 0;
    }
};

关于从标准容器继承的常见注意事项适用:不要以多态方式破坏它们,因为它们没有虚拟析构函数,注意不要对它们进行切片等。