模板与引用返回值的问题我想建立一个matrix类,储存一些用xy检索的齐的数据。存储就用一个标准库的vector。cl
模板与引用返回值的问题
我想建立一个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的值用位的方式进行保存,所以无法引用
标准库的坑之一