首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个模板类编译不过.该如何解决

2014-01-09 
一个模板类编译不过.templatetypename ObjectTypeclass ObjectReusePool{class ObjectTypepublic:~Obje

一个模板类编译不过.


template<typename ObjectType>
class ObjectReusePool
{
class ObjectType;
public:
~ObjectReusePool()
{
for (size_t I=0;I<mObjectVector.size();I++)
{
delete mObjectVector[I];
}
mObjectVector.clear();
}
inline ObjectType* GetObject()
{
if (mObjectVector.empty())return new ObjectType();
ObjectType* _Obj = mObjectVector.pop_back();
return _Obj;
}
inline void CollectObject(ObjectType* _Obj)
{
mObjectVector.push_back(_Obj);
}
protected:
//这里包含类型指针,编译不过.
std::vector<ObjectType*>  mObjectVector;
};
int main()
{
ObjectReusePool<int> abc;
abc.GetObject();
}

[解决办法]
删掉 class ObjectType;
另外 pop_back 无返回值

[解决办法]
不能写class ObjectType,因为模板不一定是类 ,且如果是类需要默认构造函数
另外,要取尾元素就是用back(),然后在用pop_back()删除最后一个元素
#include <vector>

template<typename ObjectType>
class ObjectReusePool
{
public:
~ObjectReusePool()
{
for (size_t I = 0; I<mObjectVector.size(); I++)
{
delete mObjectVector[I];
}
mObjectVector.clear();
}
inline ObjectType* GetObject()
{
if (mObjectVector.empty()) return new ObjectType;
ObjectType* _Obj = mObjectVector.back();
return _Obj;
}
inline void CollectObject(ObjectType* _Obj)
{
mObjectVector.push_back(_Obj);
}
protected:
//这里包含类型指针,编译不过.
std::vector<ObjectType*>  mObjectVector;
};
int main()
{
ObjectReusePool<int> abc;
abc.GetObject();
}

[解决办法]
#include <vector>

template<typename ObjectType>
class ObjectReusePool
{
public:
~ObjectReusePool()
{
for (size_t I = 0; I<mObjectVector.size(); I++)
{
delete mObjectVector[I];
}
mObjectVector.clear();
}
inline ObjectType* GetObject()
{
if (mObjectVector.empty()) return new ObjectType;
ObjectType* _Obj = mObjectVector.back();
mObjectVector.pop_back();
return _Obj;
}
inline void CollectObject(ObjectType* _Obj)
{
mObjectVector.push_back(_Obj);
}
protected:
//这里包含类型指针,编译不过.
std::vector<ObjectType*>  mObjectVector;
};
int main()
{
ObjectReusePool<int> abc;
abc.GetObject();
}

热点排行