0

2つのテンプレート関数を作成しようとしています。ローカル変数への参照を返す必要があります。しかし、それは機能しません:

class Cube_cache_value {
public:
  //...
  template<>
  QVector<unsigned short>& get_buffer<unsigned short>() { return vector; } // error here

  template<>
  QVector<float>& get_buffer<float>() { return float_vector; }

private:
  QVector<unsigned short> vector;
  QVector<float> float_vector;
};

エラー:名前空間以外のスコープでの明示的な特殊化'class hsp :: Cube_cache_value'

次に、関数をクラススコープから外そうとしましたが、コンパイラはそれを好みません。

class Cube_cache_value {
public:
  //...
  inline QVector<unsigned short>& get_buffer() { return vector; }
  inline QVector<float>& get_float_buffer() { return float_vector; }

private:
  QVector<unsigned short> vector;
  QVector<float> float_vector;
};

template<>
QVector<unsigned short>& get_buffer<unsigned short>(Cube_cache_value* v) { //error here
  return v->get_buffer();
}

template<>
QVector<float>& get_buffer<float>(Cube_cache_value* v) { return v->get_float_buffer(); }

エラー:「<」トークンの前に初期化子が必要です

コードを修正してください。

4

1 に答える 1

1

そもそもデザインが悪いようです。なぜあなたのクラスは2つの可能なタイプに対して2つの異なるベクトルを格納しているのですか?それは肥大化であり、あなたが望むかもしれない他のタイプのためにこれをする必要があるでしょう。

なぜこれをしないのですか?

template <typename T>
class Cube_cache_value {
public:
  // ...
  QVector<T>& get_buffer() { return buf; } 

private:
  QVector<T> buf;
};
于 2012-05-26T08:35:46.187 に答える