序列化任意类型的STL容器(包括其他容器)C ++

时间:2016-12-18 22:30:02

标签: c++ serialization stl

首先让我说我不能使用提升,因为这应该是练习。还是一种惩罚。现在不太确定。

我必须写一个看起来像这样的函数:

template <class T1, class T2>
void serialize<T1, T2>(std::map<T1, T2> in, std::vector<uint8_t>* buf);

然后我会迭代地图,序列化每个条目中的每对元素。但是,我遇到了一个问题。

我现在遇到的问题是,T1可能是一个std :: vector,其中包含其他std :: vector。我有另一个看起来与上面类似的功能,并假设它正常工作,如下所示:

template <class T1>
void serialize<T1>(std::vector<T1> in, std::vector<uint8_t>* buf);

哪个问题与上述功能相同。我应该废弃这个并采用不同的方法吗?或者这仍然可行吗?我只是错过了一些东西吗?

1 个答案:

答案 0 :(得分:0)

如果你必须知道元素是否是向量,或向量的向量等,使用模板不是正确的解决方案。

你应该创建一个具有联合的对象:

bool isVector;
union
{
    vector<T> v;
    T t;
}

使用这样的对象制作地图的关键字。如果有更多可能性,请使用枚举。

对于编译时已知的任何类型,模板应具有相同的行为。在您的情况下,只能在运行时知道对象的类型。