C++模板类是多态的一种表达形式,如vector一类的模板是编译时多态,通过一个简单的包装就可以实现运行时多态,已达到工程上的形式统一,体现了一种coding的美。
对于标准模板库只能用聚合,不能用继承,因为标准模板库的类模板的虚构函数一般都不是虚拟函数,如果继承的话会导致虚构子类时的不确定行为。
#ifndef _VECTOR_H_ #define _VECTOR_H_ #include <vector> class Vector { private: std::vector<void *> vec; public: Vector() { } bool add(void *obj) { if (0 <= indexOf(obj)) return false; vec.push_back(obj); return true; } bool remove(void *obj) { int idx = indexOf(obj); if (idx < 0) return false; vec.erase(vec.begin() + idx); return true; } int indexOf(void *obj) { int cnt = size(); for (int n=0; n<cnt; n++) { //if (obj == ((void *)at(n))) if (obj == (void *)(vec[n])) return n; } return -1; } void *get(int index) { if (index < 0) return NULL; if (size() < (index+1)) return NULL; return (void *)vec[index]; //return (void *)at(index); } bool insertAt(void *obj, int index) { if (0 <= indexOf(obj)) return false; vec.insert(vec.begin() + index, obj); return true; } int size() { return (int)vec.size(); } void clear() { vec.clear(); } }; #endif