隐式转换为std :: vector

时间:2017-08-15 23:33:54

标签: c++ c++11 templates vector

我试图从一个将std :: vector包装到std :: vector的类进行隐式转换,但是我一直收到这个错误:

  

错误:转换为' const value_type {aka const MatrixRow}'到非标量类型&#st; :: vector'

我的类MatrixRow定义如下:

template <typename NumericType>
class MatrixRow{
public:

    // a lot of other methods here
    //....
    //......
    explicit operator std::vector<NumericType>() {return row_;}
    //...
    //...

private:
    std::vector<NumericType> row_;
}

当我尝试在我的代码的其他部分中进行以下操作时发生错误:

std::vector<NumericType> row = obj.matrix_[0]; //obj.matrix_[0] is an object of type MatrixRow<NumericType>

这是我第一次使用隐式转换,所以我可能还没有理解如何正确使用它们。我做错了什么?

1 个答案:

答案 0 :(得分:4)

由于您的运算符为explicit,因此您应使用不同的语法:

std::vector<NumericType> row(obj.matrix_[0]);

顺便说一下,你可以返回const引用以避免复制:

explicit operator const std::vector<NumericType>&() const {return row_;}