4

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

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

其次,我想覆盖类的<<运算符vector,但我不知道如果不创建新类我将如何去做。

这可能看起来适得其反,但我的最终目标是让非程序员(或以前没有使用过 c++ 的人)可以阅读具有语义意义的东西。

4

2 回答 2

6

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

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

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

两者之间真的没有什么。

于 2012-04-16T12:57:12.370 回答
5

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.

于 2012-04-16T12:08:47.333 回答