重写现有类的运算符

Override operators for an existing class

本文关键字:运算符 重写      更新时间:2023-10-16

我追求两件事。我首先想将vector类键入更有意义的内容,例如List。我尝试了以下方法,但它给了我一个编译错误:

template <typename T>
typedef vector<T> List<T>

其次,我想覆盖 vector 类的<<运算符,但我不知道如何在不创建新类的情况下做到这一点。

这似乎适得其反,但我的最终目标是让非程序员(或以前没有做过 c++ 的人)可以阅读一些语义上有意义的东西。

如果你这样做,非程序员仍然无法阅读,更不用说更改代码了。但是,C++程序员在阅读代码时也会遇到很多麻烦。

如果他们不会编码,并且需要一个C++程序员为他们编写代码,那么他们将需要一个C++程序员来理解、维护和扩展第一个C++程序员编写的代码。

如果OTOH他们需要用C++编码,那么——令人惊讶!——他们将不得不学习编写和阅读C++代码。

两者

之间真的什么都没有。

C++ 中没有模板typedef,但您可以在 C++11 中使用using

template<class T>
using List = std::vector<T>;
// ...
List<int> foo; // aka std::vector<int> foo;

运算符重载可以在不修改类的情况下完成。

template<class T>
std::vector<T>& operator<<(std::vector<T>& vec, const T& value) {
  vec.push_back(value); // or whatever you want to do.
  return vec;
}

只需将其放在某个地方,它应该可以工作,即使在std::vector的类定义之外。