现在的位置: 首页 > 综合 > 正文

vector包装器

2018年03月31日 ⁄ 综合 ⁄ 共 860字 ⁄ 字号 评论关闭

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
【上篇】
【下篇】

抱歉!评论已关闭.