作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在写一个序列化和反序列化方法,我在反序列化
的实现中遇到了一个问题:我不能new
一个value_type
,这实际上是一个Skill*
。
template <class T >
static istream &DeSerializePVector(istream& istream_, T& container)
{
typedef typename T::value_type ElementType;
size_t size;
istream_ >> size;
container.reserve(size);
container.resize(size);
for(typename T::iterator ite = container.begin(); ite != container.end(); ite++)
{
*ite = new *ElementType; //how can I initialize this type?
(*ite)->DeSerialize(istream_);
}
return istream_;
}
int main()
{
Skill* disease = Factory::CreateSkill ( SKILLTYPE_DISEASE );
Skill* purify = Factory::CreateSkill ( SKILLTYPE_PURIFY );
Skill* skills[2] = {disease, purify};
vector<Skill*> int_vector = Tools::MakeVector ( skills );
ofstream fileOut;
fileOut.open ( "data.txt", std::ofstream::binary );
ISerializable::SerializePVector( fileOut, int_vector );
fileOut.flush();
fileOut.close();
ifstream fileIn;
vector<Skill*> int_vector2;
fileIn.open ( "data.txt", std::ofstream::binary );
ISerializable::DeSerializePVector( fileIn, int_vector2 );
}
我应该如何完成这项工作?
最佳答案
假设 ElementType
有一个默认的构造函数,那么
*ite = new ElementType;
ElementType
已经是一个指针类型,那么你可能需要这个(C++11):
#include <type_traits>
*ite = new typename std::remove_pointer<ElementType>::type;
如果您不支持 C++11,则可以使用等效的 boost
。
关于c++ - 如何新建一个 value_type 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678317/
我是一名优秀的程序员,十分优秀!