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

Nor*_*löw 7 c++ templates type-traits

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

Jar*_*ock 4

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

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

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