我正在寫一個序列化和反序列化的方法,並且我在執行deserialize
時遇到了一個問題:我不能new
a value_type
,實際上它是Skill*
。如何新增value_type指針?
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);
}
我該如何獲得這項工作?
正確的語法是'new ElementType'(沒有「new」和「ElementType」之間的星號)。這是問題嗎?或者你問如何決定使用哪個構造函數? '新的ElementType'意味着你調用默認的構造函數。 – jogojapan
據我可以告訴代碼,你已經分配了這些對象。 * ite無論是疾病還是淨化。在這種情況下,您根本不需要'* ite = new ElementType'這一行,只需調用DeSerialize即可,我認爲這實際上是用數據填充這些對象。 – combinatorial
我不能新的技能* ..如果一個技能放在向量中,那麼你是對的。 –