Мне нужно создать класс Buffer, чей тип переменных, которые составляют управляемый буфер, определяется во время создания. Таким образом, мне нужен буферный класс длинных байтов int, длиной 30 элементов, я буду создавать что-то вроде:
GeneralBuffer myLongBuffer (long int, 30); или GeneralBuffer myLongBuffer (LONG, 30);
Хотя если мне нужен нефиксированный плавающий тип:
GeneralBuffer myFloatingBuffer (unsigend float, 30); или или GeneralBuffer myLongBuffer (UFLOATING, 30);
Какие-либо предложения?
Поскольку типы являются конструкцией времени компиляции, вы не можете передавать их в качестве аргументов функции. Вместо этого вы хотите шаблоны. Шаблоны позволяют создавать экземпляры различных реализаций класса или функции в зависимости от параметров типа шаблона, которые вы передаете ему. Так что если у вас есть:
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
.
Других решений пока нет …