Использование внешней памяти или пользовательский распределитель


Я создаю класс, который использует пользовательский буфер. Я хочу предложить возможность прохождения внешнего адреса памяти (для более высокой совместимости между языками) или (для удобства) указать пользовательский распределитель типа. Следующий код показывает, что я имею в виду:

template<typename int_type, class alloc = void>
class uses_custom_buffers
    : uses_custom_buffers<int_type, void>
{
public:
    uses_custom_buffers<int_type, alloc>* set_buffer(std::size_t count, std::size_t size)
    {
        typename alloc::rebind<int_type*>::other pointer_alloc;
        int_type** buffer = pointer_alloc.allocate(count);
        for (std::size_t i = 0; i < count; ++i)
            buffer[i] = this->m_alloc.allocate(size);
        this->uses_custom_buffers<int_type, void>::set_buffer(count, buffer, size);
        return this;
    }

private:
    using uses_custom_buffers<int_type, void>::set_buffer;

    alloc m_alloc;
};

template<typename int_type>
class uses_custom_buffers<int_type, void>
{
public:
    uses_custom_buffers<int_type, void>* set_buffer(std::size_t count, int_type** buffers, std::size_t size)
    {
        this->m_buf   = buffers;
        this->m_count = count;
        this->m_size  = size;
        return this;
    }

private:
    int_type**  m_buf;
    std::size_t m_count,
                m_size;
};

Обратите внимание: в этом примере не волнует освобождения какого-либо ресурса или безопасность исключение (для облегчения задачи). Вы видите какие-либо проблемы с этой конструкцией?



Комментарии