我可以使用 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/