我追求两件事。我首先想将vector
类键入更有意义的东西,例如List
. 我尝试了以下方法,但它给了我一个编译错误:
template <typename T>
typedef vector<T> List<T>
其次,我想覆盖类的<<
运算符vector
,但我不知道如果不创建新类我将如何去做。
这可能看起来适得其反,但我的最终目标是让非程序员(或以前没有使用过 c++ 的人)可以阅读具有语义意义的东西。
如果这样做,非程序员仍然无法阅读,更不用说更改代码了。但是,C++ 程序员在阅读代码时也会遇到很多麻烦。
如果他们不会编码,并且需要 C++ 程序员为他们编写代码,那么他们将需要 C++ 程序员来理解、维护和扩展第一个 C++ 程序员编写的代码。
如果,OTOH,他们需要用 C++ 编写代码,那么——惊喜!— 他们将不得不学习编写和阅读 C++ 代码。
两者之间真的没有什么。
C++中没有 template typedef
,但你可以using
在 C++11 中使用。
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
.