【发布时间】:2014-08-21 07:05:43
【问题描述】:
我正在我的项目中重构一个序列化库,以便它与
-std=c++11 并想识别一个对象是否是 STL 容器,例如
is_stl_deque<T>::value
is_stl_list<T>::value
is_stl_vector<T>::value
is_set<T>::value
is_map<T>::value
is_pair<T>::value
is_sequence<T>::value
是否有任何提升特征来检查对象是否是 STL 容器?
如果没有(我找不到),我该如何实现?
【问题讨论】:
-
您可能解决了错误的问题。首先,“STL 容器”定义不明确,其次,您错过了一些标准库容器,第三,“类似 STL”的容器呢?例如 Qt 容器。
-
你可以使用is_same,或者boost equivalent
-
如果您已经在使用 Boost,为什么不使用 Boost serialization?
-
@JoachimPileborg 事实上,我正在重构现有的序列化库,以便它使用 -std=c++11 进行编译,并且迁移到 Boost 序列化可能会破坏我现有数据的向后兼容性。
-
好吧,如何创建一个 trait-class 来检查是否有为目标类定义的
begin和end方法?这将适用于所有标准容器,以及 Qt 容器,也可能来自其他库。它可以完成,并且已经完成(只需搜索一下,您就会在 SO 上找到此类问题的链接)。
标签: c++ boost stl typetraits