我正在尝试编写两个模板函数。它们必须简单地返回对局部变量的引用。但它不起作用:
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;'之前的预期初始化程序令牌
请更正我的代码。
答案 0 :(得分:1)
首先看起来糟糕的设计。为什么你的类为2种可能的类型存储2个不同的向量?这是一个膨胀,你需要为你想要的任何其他类型做这个。
为什么不这样做?
template <typename T>
class Cube_cache_value {
public:
// ...
QVector<T>& get_buffer() { return buf; }
private:
QVector<T> buf;
};