0

我想为使用 完成的分配提供专门的优化std::allocator,但是如果有人在没有覆盖allocateor的情况下对其进行了子类化deallocate,那么我不知道如何检测他们是否仍在使用std::allocator

我该怎么做呢?

4

1 回答 1

1

假设他们没有定义自己的allocatedeallocate函数,那么测试的一种方法是测试值

is_default_allocator_allocation<allocator_type>::value

测试allocatedeallocate方法是否为默认方法。

如果他们提供了自己的功能,那么就没有通用的测试方法。

此解决方案不考虑其他方法。
它可能会给您偶尔的误报,但不应给出误报。

我的实现:

template<class Ax> char (&is_default_deallocate(void (std::allocator<typename Ax::value_type>::*)(typename Ax::pointer, typename Ax::size_type)))[1];
template<class Ax> char (&is_default_deallocate(void (Ax::*)(typename Ax::pointer, typename Ax::size_type)))[2];
template<class Ax> char (&is_default_allocate(typename Ax::pointer (std::allocator<typename Ax::value_type>::*)(typename Ax::size_type, void const *)))[1];
template<class Ax> char (&is_default_allocate(typename Ax::pointer (Ax::*)(typename Ax::size_type, void const *)))[2];

template<class Ax>
struct is_default_allocator_allocation  // tests allocate() and deallocate()
{
    static bool const value =
        sizeof(is_default_deallocate<Ax>(&Ax::deallocate)) == sizeof(char)
        && sizeof(is_default_allocate<Ax>(&Ax::allocate)) == sizeof(char);
};
于 2012-08-20T23:23:31.917 回答