我可以使用C ++ Type Traits来检查类型是否是类似STL的容器?我已经知道GCC的内置__is_class
,但如果可能的话,我想更具体一点。
答案 0 :(得分:4)
您可以构建自己的traits类来检查Container接口的类型。这将涉及验证某些相关类型(例如container::iterator
)是否存在并验证某些表达式(例如container.empty()
)是否有效(即,它们编译时没有错误)。可以使用各种SFINAE技术来构建特征类,以检查嵌套类型和验证表达式。
SGI的page详细说明了相关类型和有效表达式,这些类型和类型为Container“概念”必须提供的模型。最新的ISO C ++标准文档可能会提供更权威的来源,因为SGI页面很旧。
当然,traits类无法验证像container.empty()
这样的表达式的语义;他们只能检查表达是否合法。有些人proposed扩展了语言,允许程序员断言表达式的语义属性,这将解决这个限制。