在 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;
}
};
关于从标准容器继承的常见注意事项适用:不要以多态方式破坏它们,因为它们没有虚拟析构函数,注意不要对它们进行切片等。
我已经尝试阅读此处的几个重载问题以了解如何做到这一点,但据我了解,重载括号与其他运算符不同,因为它需要在 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;
}
};
关于从标准容器继承的常见注意事项适用:不要以多态方式破坏它们,因为它们没有虚拟析构函数,注意不要对它们进行切片等。