所以,我正在创建一个序列化库,我希望将各种数据类型保存到字符串流,然后base64编码该字符串流的字符串,然后将其保存到文件中。除了我必须完成几十个和几十个类似的功能之外,它一切运作良好。使用模板的好地方,对吗?
嗯,我不确定如何这样做,因为虽然很多功能非常相似
int save(stringstream&, const int);
int save(stringstream&, const unsigned int);
int save(stringstream&, const unsigned char);
int SaveLoad::Save(stringstream & saveStream, const unsigned int input)
{
saveStream << input << Delimiter;
return 1;
}
其中一些,比如
int save(stringstream&, const vector<int>);
需要特殊处理:
int SaveLoad::Save(stringstream& saveStream, const vector<int> input)
{
unsigned int length = input.size();
Save(saveStream, length);
for (unsigned int i = 0; i < length; i++)
{
Save(saveStream, input[i]);
}
return 1;
}
以便他们从字符串流中正确存储和加载数据。别担心,甚至会有更多自定义保存/加载程序的类。
有没有办法去做我想要的事情?或者有没有办法让模板函数只采用特定类型的类型?
答案 0 :(得分:1)
回答您的编程问题:
template<typename T>
int SaveLoad::Save(stringstream & saveStream, const T& input)
{
saveStream << input << Delimiter;
return 1;
}
template<typename T>
int SaveLoad::Save(stringstream& saveStream, const vector<T>& input)
{
unsigned int length = input.size();
Save(saveStream, length);
for (unsigned int i = 0; i < length; i++)
{
Save(saveStream, input[i]);
}
return 1;
}
回答关于序列化的更广泛的问题:c ++的结帐cereal serialization library。