两种标准类型的两个模板函数

时间:2012-05-26 08:01:18

标签: c++ templates

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

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

错误:'&lt;'之前的预期初始化程序令牌

请更正我的代码。

1 个答案:

答案 0 :(得分:1)

首先看起来糟糕的设计。为什么你的类为2种可能的类型存储2个不同的向量?这是一个膨胀,你需要为你想要的任何其他类型做这个。

为什么不这样做?

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

private:
  QVector<T> buf;
};