首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-03-06 
模板与引用返回值的问题我想建立一个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的值用位的方式进行保存,所以无法引用
标准库的坑之一

热点排行