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

Overloading parentheses operator on vector in c++

本文关键字:重载 运算符 向量 C++      更新时间:2023-10-16

我尝试阅读这里的几个重载问题来了解如何做到这一点,但据我所知,重载括号与其他运算符不同,因为它需要在类中重载?

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

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

具有匹配功能。

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

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

显式专用化之前必须有"模板<>"类 向量 {

我试图纠正错误所要求的内容,但似乎我对该过程的理解还不够好。

在这里重载运算符的正确方法是什么?

提前感谢您的任何回复。

你没看错:operator()是四个运算符之一(连同=[]->(,只能作为类成员实现。而且由于std::vector不是你的(无论是模板本身还是从它专门化的任何类(,你不能为它实现它们。

不过,仍然有一个解决方案,那就是std::vector包装在您自己的类中,并为此重载operator()

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

关于从标准容器继承的常见警告适用:不要多态地破坏它们,因为它们没有虚拟析构函数,注意不要切片它们等。