读书人

模板与引用返回值的有关问题

发布时间: 2013-03-06 16:20:31 作者: rapoo

模板与引用返回值的问题
我想建立一个matrix类,储存一些用xy检索的齐的数据。存储就用一个标准库的vector。


class Matrix
{
public:
Matrix();

inline void resize(size_t len1, size_t len2)
{
data.resize((len1 + 1)*(len2 + 1));
}

/// @param p1: in range [0,len1]
/// @param p2: in range [0,len2]
inline T& at(size_t p1, size_t p2)
{
return data[p1 * (len2 + 1) + p2];
}
private:
size_t len1;
size_t len2;
std::vector<T> data;
};

我想用这个at方法用来读写内容,但编译时就有错误。我有一个Matrix<bool>的实例,然后得到如下错误:
error: invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘std::vector<bool, std::allocator<bool> >::reference {aka std::_Bit_reference}’
语句是:

mat_gap.at(0, 0) = false;

这是为什么?


[解决办法]

tmeplate <class T>class Matrix
{
public:
Matrix();
inline void resize(size_t len1, size_t len2)
{
data.resize((len1 + 1)*(len2 + 1));
}
/// @param p1: in range [0,len1]
/// @param p2: in range [0,len2]
inline T& at(size_t p1, size_t p2)
{
return data[p1 * (len2 + 1) + p2];
}
private:
size_t len1;
size_t len2;
std::vector<T> data;
};
类模板的定义形式不对
[解决办法]
vector<bool>的特化用了代理对象技术,很奇葩,建议避开
它把bool的值用位的方式进行保存,所以无法引用
标准库的坑之一

读书人网 >C++

热点推荐