Writing allocator_traits<T>::value_type
在 SFINAE 上下文中似乎是测试类型是否可行的可行方法T
事实上,它是一个分配器。然而,这并不是特别优雅,而且我过去也曾被极端情况所困扰。
因此我的问题是:人们如何最好地实施is_allocator<T>
特征包含::value
如果 T 是分配器,则为 true,否则为 ::false?
Writing allocator_traits<T>::value_type
在 SFINAE 上下文中似乎是测试类型是否可行的可行方法T
事实上,它是一个分配器。
我认为这还不够。这只会检查是否T
has a value_type
并且是可重新绑定的。 libstdc++ 和 libc++ 都会考虑std::map<int, int>
成为该模型中的分配者。
该标准有要求表 http://eel.is/c++draft/allocator.requirements#tab:utilities.allocator.requirements对于什么构成Allocator
。我认为你最好的选择就是检查几个表达式的有效性,即:
X::value_type
-
a.allocate(n)
有效并返回X::pointer
-
a.deallocate(p, n)
有效
(where X
是您正在检查的类型,a
is an X&
, and n
是一个类型的值allocator_traits<X>::size_type
)
如果有一种类型检查了所有这些框,但仍然不是 allcoator,那么... ́\_(ツ)_/̅。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)