为 STL 分配器实现 select_on_container_copy_construction()

Implement select_on_container_copy_construction() for STL Allocator

我想提供一个自定义

select_on_container_copy_construction()

http://www.cplusplus.com/reference/memory/allocator_traits/select_on_container_copy_construction/

我的分配器。

我试图将它直接添加到我的分配器 class 中,如下所示:

T select_on_container_copy_construction( const T& a ) const {
  ...
}

但是没有调用。

我尝试将其实现为类型特征:

namespace std {
  template<class T>
  struct allocator_traits<static_allocator<T>> {
    typedef T value_type;
  };
}

但现在我还必须实现所有其他特征功能。

是否有更简单的方法来覆盖此函数而无需提供完整的 allocator_traits

完整代码示例可在此处找到: https://onlinegdb.com/H1iJJIN1N

我尝试了各种变体,将 static/const 添加到函数中。

Allocator 命名要求 [allocator.requirements] 假定以下调用语法:

a.select_on_container_copy_construction()

并期望 return 类型是分配器类型。

您声明了一个附加参数 (const T& a),这使得上述调用格式错误,迫使 std::allocator_traits 回退到默认实现(returning 分配器实例) [allocator.traits]:

static Alloc select_on_container_copy_construction(const Alloc& rhs);

Returns: rhs.select_on_container_copy_construction() if that expression is well-formed; otherwise, rhs.