测试类型是否是分配器的正确方法是什么?

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

Bar*_*rry 6

\n

在 SFINAE 上下文中编写allocator_traits<T>::value_type似乎是测试类型是否T实际上是分配器的可行方法。

\n
\n\n

我认为这还不够。这只会检查是否T有 avalue_type且可重新绑定。libstdc++ 和 libc++ 都被视为std::map<int, int>该模型中的分配器。

\n\n

该标准有一个关于构成 的要求表Allocator。我认为你最好的选择就是检查几个表达式的有效性,即:

\n\n
    \n
  • X::value_type
  • \n
  • a.allocate(n)有效并返回X::pointer
  • \n
  • a.deallocate(p, n)有效
  • \n
\n\n

(其中X是您要检查的类型,aX&n是 type 的值allocator_traits<X>::size_type

\n\n

如果有一种类型检查了所有这些框,但仍然不是 allcoator,那么... \xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf。

\n