odi*_*erd 4 c++ allocator type-traits c++14
在 SFINAE 上下文中编写allocator_traits<T>::value_type
似乎是测试类型是否T
实际上是分配器的可行方法。然而,这并不是特别优雅,而且我过去也曾被极端情况所困扰。
因此我的问题是:在 T 是分配器的情况下,如何最好地实现is_allocator<T>
包含 a of true 的特征,否则如何实现包含 ::false 的特征?::value
\n\n\n在 SFINAE 上下文中编写
\nallocator_traits<T>::value_type
似乎是测试类型是否T
实际上是分配器的可行方法。
我认为这还不够。这只会检查是否T
有 avalue_type
且可重新绑定。libstdc++ 和 libc++ 都被视为std::map<int, int>
该模型中的分配器。
该标准有一个关于构成 的要求表Allocator
。我认为你最好的选择就是检查几个表达式的有效性,即:
X::value_type
a.allocate(n)
有效并返回X::pointer
a.deallocate(p, n)
有效(其中X
是您要检查的类型,a
是X&
,n
是 type 的值allocator_traits<X>::size_type
)
如果有一种类型检查了所有这些框,但仍然不是 allcoator,那么... \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf。
\n