如何新建value_type指针

How Can I new a value_type pointer?

本文关键字:value type 指针 新建 何新建      更新时间:2023-10-16

我正在写一个序列化和反序列化的方法,我在deserialize的实现中遇到了一个问题:我无法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 等效项。

相关文章: