-3

マネージド バッファを構成する変数の型がインスタンス化時に決定される Buffer クラスを作成する必要があります。したがって、30 要素の長さの long int バイトのバッファ クラスが必要です。次のようなインスタンスを作成します。

GeneralBuffer myLongBuffer(long int, 30); または GeneralBuffer myLongBuffer(LONG, 30);

一方、unsigend 浮動型が必要な場合:

GeneralBuffer myFloatingBuffer(unsignend float, 30); または GeneralBuffer myLongBuffer(UFLOATING, 30);

助言がありますか?

4

1 に答える 1

1

型はコンパイル時の構造であるため、引数として関数に渡すことはできません。代わりに、テンプレートが必要です。テンプレートを使用すると、渡すテンプレート型パラメーターに応じて、クラスまたは関数のさまざまな実装をインスタンス化できます。あなたが持っている場合:

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ます。

于 2013-03-07T11:35:11.733 に答える