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