Существует ли стандартный адаптер/оболочка распределителя memory_resource?

Я удивлен, что не вижу стандарта или кого-либо еще (?), Предоставляющего адаптер/оболочку, чтобы стандартные распределители выглядели как std::memory_resource. Я что-то упускаю? Это просто что-то вроде

template <typename ByteAllocator>
class AllocatorMemoryResource : public std::memory_resource {
    ByteAllocator m_allocator;
    void* do_allocate(std::size_t bytes, std::size_t alignment) override {
        // Do something to align the storage???
        return static_cast<void*>(m_allocator.allocate(bytes));
    }
    void do_deallocate(void* p, std::size_t bytes, std::size_t alignment) override {
        m_allocator.deallocate(p, bytes);
    }
    bool do_is_equal(const std::pmr::memory_resource& other) const noexcept override {
        return this == &other; // Right?
    }
};

Предоставляется ли такая оболочка в std или Boost или где-то еще? Я не находил. Я использую tbb::scalable_allocator и хотел бы иметь возможность использовать его с std::pmr::vector<T>.


person Ben    schedule 02.10.2020    source источник
comment
На данный момент я считаю, что это все еще экспериментально: en.cppreference.com/w/cpp/ экспериментальный/resource_adaptor   -  person Dave S    schedule 02.10.2020
comment
Сделайте это ответом, и я отмечу его как правильный ответ!   -  person Ben    schedule 02.10.2020


Ответы (1)


На данный момент я считаю, что это все еще экспериментально: https://en.cppreference.com/w/cpp/experimental/resource_adaptor.

Ваша реализация кажется правильной в самом простом смысле. Вы можете сделать его более продвинутым, выполнив динамическое приведение и вернув результат

this->m_allocator == cast_other->m_allocator

person Dave S    schedule 02.10.2020
comment
Это то, о чем я тоже думал. Спасибо еще раз. - person Ben; 03.10.2020