Как инициализировать класс, который управляет буфером, тип данных которого передается при создании экземпляра.

Мне нужно создать класс Buffer, чей тип переменных, которые составляют управляемый буфер, определяется во время создания. Таким образом, мне нужен буферный класс длинных байтов int, длиной 30 элементов, я буду создавать что-то вроде:

GeneralBuffer myLongBuffer (long int, 30); или GeneralBuffer myLongBuffer (LONG, 30);

Хотя если мне нужен нефиксированный плавающий тип:

GeneralBuffer myFloatingBuffer (unsigend float, 30); или или GeneralBuffer myLongBuffer (UFLOATING, 30);

Какие-либо предложения?

-3

Решение

Поскольку типы являются конструкцией времени компиляции, вы не можете передавать их в качестве аргументов функции. Вместо этого вы хотите шаблоны. Шаблоны позволяют создавать экземпляры различных реализаций класса или функции в зависимости от параметров типа шаблона, которые вы передаете ему. Так что если у вас есть:

template <typename T>
class GeneralBuffer
{
private:
T* internal_buffer;
public:
GeneralBuffer(size_t size);
};

Вы можете создать экземпляр GeneralBuffer за int и создайте объект этого типа следующим образом:

GeneralBuffer<int> my_int_buffer(30);

Тем не менее, это выглядит как переопределение std::vector.

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

template <typename T, std::size_t N>
class GeneralBuffer
{
private:
T internal_array[N];
public:
GeneralBuffer();
};

Который вы бы использовали так:

GeneralBuffer<int, 30> my_int_buffer;

Тем не менее, это выглядит как переопределение std::array.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]