C ++模板编程/ STL演绎参数

时间:2016-12-01 22:20:19

标签: c++ templates

我正在尝试为基本类型模板化的STL容器实现序列化方法。

我怎样才能推断出,假设有哪些键和值类型可以说是无序映射,这样我就可以根据键/值类型实现适当的逻辑。

我知道模板元编程是实现这一目标的方法,但我们非常感谢一个具体的例子。

2 个答案:

答案 0 :(得分:1)

容器定义typedef来描述其中的内容。

如果T是地图,多地图,集合或多集,以及它们无序的风格,就像你有一个

 T::iterator

 T::const_iterator

你也有一个

 T::key_type

 T::value_type

请参阅每个容器的规范,以获取它定义的所有类型的完整列表。

这就是你怎么知道容器里的东西。

答案 1 :(得分:1)

这可能足以启动您的项目。这个超级棒的JSON序列化程序使用函数重载来处理要序列化的每个数据类型。 Serialize的{​​{1}}重载本身会调用unordered_map来序列化每个包含对象的键和值。只需添加新的重载即可支持新类型。

我之前为Serialize更改了Serialize重载:现在它演示了如何使用类型特征库,以便编译器为任何算术类型选择此重载,而不仅仅是{{1 }}

int

输出

int