c++ - 是否可以使用类型特征来检查类型是否是容器?

标签 c++ templates typetraits

我可以使用 C++ 类型特征来检查类型是否是类似 STL 的容器吗?我已经知道 GCC 的内置 __is_class 但如果可能的话我想更具体一些。

最佳答案

您可以构建自己的特征类来检查 Container 接口(interface)的类型。这将涉及验证某些关联类型(例如 container::iterator)是否存在以及验证某些表达式(例如 container.empty())是否有效(即,他们编译没有错误)。各种 SFINAE 技术可用于构建检查嵌套类型和验证表达式的特征类。

SGI 的 page详细指定建模容器“概念”的类型必须提供的关联类型和有效表达式。最新的 ISO C++ 标准文档可能会提供更权威的来源,因为 SGI 页面已经很旧了。

当然,traits类不能验证像container.empty()这样的表达式的语义;他们只能检查表达式是否合法。有些有proposed扩展语言以允许程序员断言表达式的语义属性,这将解决此限制。

关于c++ - 是否可以使用类型特征来检查类型是否是容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617203/

相关文章:

c++ - 使用 SFINAE 检查是否存在非硬连线成员函数

c++ - 在cmake中,如何以可伸缩的方式指定子目录的依赖关系?

c++ - 为什么LNK1120 & LNK2019在模板和友元函数的情况下出现

c++ - move 构造函数,使用 std::move 在两个对象之间 move vector ?

css - 使用 VML,是否可以设置文本颜色和位置?

c++ - 为什么这个 sfinae 不起作用?

c++ - 仿函数/函数对象的 is_function 类型特征

c++ - 向成员函数添加 const 限定符

C++字符串内存重用优化

c++ - 在 scoped_lock 上进行额外的解锁调用