0

我正在尝试编写两个模板函数。它们必须简单地返回对局部变量的引用。但它不起作用:

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;
};

错误:非命名空间范围“类 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 回答