我追求两件事。我首先要将vector
类的类型设置为更有意义的内容,例如List
。我尝试了以下但它给了我一个编译错误:
template <typename T>
typedef vector<T> List<T>
其次,我想覆盖<<
类的vector
运算符,但我不知道如何在不创建新类的情况下继续操作。
这看起来可能适得其反,但我的最终目标是让非程序员(或之前没有完成过c ++的人)能够阅读具有语义意义的内容。
答案 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
的类定义之外。