-3

我需要创建一个 Buffer 类,其构成托管缓冲区的变量类型是在实例化时确定的。因此,我需要一个长 int 字节的缓冲区类,长度为 30 个元素,我将实例化如下内容:

GeneralBuffer myLongBuffer(long int, 30); 或 GeneralBuffer myLongBuffer(LONG, 30);

而如果我需要一个无符号的浮动类型:

GeneralBuffer myFloatingBuffer(unsigend float, 30); 或 GeneralBuffer myLongBuffer(UFLOATING, 30);

有什么建议么?

4

1 回答 1

1

由于类型是编译时构造,因此您不能将它们作为参数传递给函数。相反,您需要模板。模板允许根据您传递给它的模板类型参数来实例化类或函数的不同实现。因此,如果您有:

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

您可以像这样实例化GeneralBufferint创建该类型的对象:

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.

于 2013-03-07T11:35:11.733 回答