c++ - 检测类型是否为关联容器

标签 c++ templates containers sfinae

我正在编写一些容器操作函数。通常情况下,类似 vector 的容器(如 vector、list、deque、array 等)有一个版本,而关联容器(如 map、multimap、unordered_map 等)有另一个版本。我想知道什么是“最好的方法”来检测一个类是否是一个关联容器。也许像使用 BOOST_MPL_HAS_XXX_TRAIT_DEF 检测 mapped_type typedef 的存在?

最佳答案

这是一个编译时测试,因此没有 CPU/内存效率方面的选择“最佳方式”。如果您通过使用 boost 检查 mapped_type 使其工作,并且满足您的需求,则没有理由寻找任何不同的东西,尽管肯定有无 boost 的替代方案(例如参见 here )

请注意,尽管 setunordered_set 被标准视为关联容器,但没有 mapped_type 成员 - 如果您想要包括它们,您可以测试 key_type

关于c++ - 检测类型是否为关联容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156957/

相关文章:

c++ - 为什么概念会使 C++ 编译速度变慢?

c++ - Visual C++ 错误 C2143 : syntax error: missing ')' before 'constant'

C++ 模板限制

amazon-web-services - codeBuild 容器如何在没有事先身份验证的情况下运行 aws-cli 命令?

postgresql - Docker,在包含 "ubuntu:14.04"的容器中安装 postgresql,离开容器时丢失

c# - 在 UWP 项目中引用 native c++ dll

c++ - 那里有一些字符串问题

c++ - 如何在模板基类中调用模板成员函数?

特定基类的 C++ 类模板

c++ - 标准容器是否提供一些缓存功能?