【问题标题】:Two template functions for two standard types两个标准类型的两个模板函数
【发布时间】:2012-05-26 08:01:17
【问题描述】:

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

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

错误:“

请更正我的代码。

【问题讨论】:

  • 您不想专门化函数,而是覆盖它们。见gotw.ca/publications/mill17.htm
  • 你通过非常量指针返回那些,还不如将它们公开并丢弃愚蠢的访问器。
  • @Cat Plus Plus,我需要它们作为模板函数,因为我想在另一个模板函数中使用它们。

标签: c++ templates


【解决方案1】:

首先它看起来像是糟糕的设计。为什么您的班级为 2 种可能的类型存储 2 个不同的向量?这是一个膨胀,你需要为任何你想要的其他类型执行此操作。

为什么不这样做?

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

private:
  QVector<T> buf;
};

【讨论】:

  • 我同意。我想我可以只添加两个函数,然后再重构这个类。但我认为现在改变它要好得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 2014-11-29
相关资源
最近更新 更多