覆盖现有类的运算符

时间:2012-04-16 11:57:07

标签: c++ oop

我追求两件事。我首先要将vector类的类型设置为更有意义的内容,例如List。我尝试了以下但它给了我一个编译错误:

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

其次,我想覆盖<<类的vector运算符,但我不知道如何在不创建新类的情况下继续操作。

这看起来可能适得其反,但我的最终目标是让非程序员(或之前没有完成过c ++的人)能够阅读具有语义意义的内容。

2 个答案:

答案 0 :(得分:5)

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

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

如果,OTOH,他们需要用C ++编写代码,那么 - 意外! - 他们将不得不学习编写和阅读C ++代码。

两者之间确实没有任何内容。

答案 1 :(得分:3)

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的类定义之外。