我正在尝试从将std :: vector包装到std :: vector的类进行隐式转换,但是我一直收到此错误:

错误:从'const value_type {aka const MatrixRow}'转换为非标量类型'std :: 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楼 票数:4 已采纳

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

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

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

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

  ask by Chromz translate from so

未解决问题?本站智能推荐:

3回复

忽略模板的特殊化,并显式使用未经特殊化的模板(std::vector)

在处理一些旧代码时,它遇到了一个std::unique_ptr<bool>用于存储一些布尔值(分配在类构造函数中并用作数组)。 当我尝试用std::vector<bool>替换它时,我不得不调用一个需要计数和指向第一个布尔值( const bool* )的库函数时遇到
3回复

采用std::vector或std::array的模板函数

我有一个函数,目前接受2个可以包含任何普通旧数据的向量... 题: 如果这些容器采用不同数量的模板参数,是否可以将其修改为采用两个std::array或两个std::vector ,甚至是它们的组合?
2回复

std::vector的模板化迭代器

我正在创建一个实用程序函数,以将字节数组组合为基于模板类型的值。 我目前有两个重载函数,它们接受一对正向迭代器和一对反向迭代器,以便处理大小端字节。 是否可以有一个模板化矢量迭代器并将我的两个函数简化为一个? 例如,这就是我想要做的: 我得到的编译错误是:
1回复

编译器不推导出模板参数(mapstd::vector->std::vector)

我有以下模板。 当我在我的代码中使用它时,我指定了模板参数。 为什么编译器无法为我推断出这个? 如何更改模板定义以使其工作? 可运行代码: http : //ideone.com/FjGnxd 这个问题中的原始代码来自: std :: transform-like函数返回转换后的
1回复

引用或指向不完整类型的std::vector

正如在这里所回答的: 如何将不完整类型用作向量的模板参数? 在实例化模板组件时使用不完整类型作为模板参数可能导致未定义的行为。 但是当我们只有指向不完全类型的模板组件的指针/引用作为参数时,该规则是否成立? 在这种情况下,实例也会发生吗? 例如: 换句话说,上面的代码是否有效?
2回复

在std::vector中将多个不同类型的模板存储

谢谢大家的宝贵时间,我真的很感激。 需要使用模板化的方式将不同类型的多个变量存储在std :: vector中。 要使用以下功能,程序员必须知道他们以什么顺序存储变量以及存储了多少变量。 创建一个子类来保存实际变量: 创建了基础助手类的向量 数据按如下方式放入向量中: 此处
1回复

尝试在结构中接收模板并在std::vector上使用它

我正在尝试为测试创建一个树类,但我得到:“错误:'模板类 std::vector 的模板参数列表中参数 1 的类型/值不匹配”。
2回复

使用用户定义的比较类对std::pair的std::vector进行排序

我有两个类模板MyClassA<T>和MyClassB<T> 。 从这些,我构造了两个std::vector作为std::vector<MyClassA<double>> A和std::vector<MyClassB<double&