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

时间:2011-10-01 00:01:39

标签: c++ templates typetraits

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

1 个答案:

答案 0 :(得分:4)

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

SGI的page详细说明了相关类型和有效表达式,这些类型和类型为Container“概念”必须提供的模型。最新的ISO C ++标准文档可能会提供更权威的来源,因为SGI页面很旧。

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

相关问题