在SFINAE上下文中编写allocator_traits<T>::value_type
似乎是一种测试类型T
实际上是否为分配器的可行方法。但是,这并不是特别优雅,过去我一直被角落里的箱子烧死。
因此,我的问题是:在T是分配器而否则为:: false的情况下,如何最好地实现包含is_allocator<T>
为true的::value
特征?
答案 0 :(得分:4)
在SFINAE上下文中写
allocator_traits<T>::value_type
似乎是测试类型T
实际上是否是分配器的可行方法。
我认为这还不够。这只会检查T
是否具有value_type
并且可重新绑定。 libstdc ++和libc ++都将std::map<int, int>
视为该模型中的分配器。
该标准包含Allocator
的{{3}}。我认为您最好的选择就是检查几个表达式的有效性,即:
X::value_type
a.allocate(n)
有效并返回X::pointer
a.deallocate(p, n)
有效(其中X
是您要检查的类型,a
是X&
,而n
是类型allocator_traits<X>::size_type
的值)
如果有一个检查所有这些框的类型仍然不是分配器,那么... \ _(ツ)_ /¯。