c++ - 重载赋值运算符以返回 std::vector

标签 c++ c++11

下面的函数将存储在类 cVector 中的内容转换为 std::vector 并返回它。

template <class T> std::vector<T> cVector<T>::convertToStdVector()
{
    std::vector<T> vec;
    vec.resize(m_nSize);
    for (unsigned i = 0; i < m_nSize; ++i) {
        vec[i] = m_pData[i];
    }
    return vec;
}

上面的工作很完美,现在我不想使用这样的函数,而是想重载赋值运算符并基本上做同样的事情。

我试过以下方法:

template <class T> class cVector
{
public:

    cVector(unsigned nSize, AllocEnum eAllocType=MALLOC);
    cVector(T *pData, unsigned nSize, bool bCopy=false);

    // convert to std vector
    std::vector<T> operator=(const cVector<T> &cvec);

    //..
    //....
}

template <class T> std::vector<T> cVector<T>::operator=(const cVector<T> &cvec)
{
    std::vector<T> vec;
    vec.resize(m_nSize);
    for (unsigned i = 0; i < m_nSize; ++i) {
        vec[i] = m_pData[i];
    }
    return vec;
}

这编译得很好,但是当我尝试在我的代码中调用它时,例如

std::vector<float> vec = cVectorInstance;

然后在编译过程中出现以下错误:

error: conversion from 'cVector' to non-scalar type 'std::vector >' requested"

我不确定这里出了什么问题,希望有人能帮助/解释。

最佳答案

您定义的赋值运算符实际上是用于将一个 cVector 赋值给另一个 cVector,而不是转换为 std::vector,这正是您想要的。

您正在寻找的是重载 conversion operator :

operator std::vector< T >() const { ... }

关于c++ - 重载赋值运算符以返回 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45322982/

相关文章:

c++ - 查找 std::vector 中的最后一个非零元素

c++ - 专门针对一种数据类型的参数包

c++ - `static constexpr` 在常量表达式中调用的函数是...错误?

c++ - 为什么 std::vector 的元素需要 move 构造函数?

c++ - 在 C++ 和 cygwin 中使用字符串

c++ - 将 std::string 转换为 RegSetValueEx() 的 const BYTE*

c++ - 为什么 clang 不使用 NRVO 对此进行优化?

c++ - 关于创建 StaticLib 的格式错误的存档目录条目

c++ - 委托(delegate)构造函数不能有其他内存初始化器 - 错误

c++ - 尝试打开目录进行读取时,CreateFile 总是返回错误 5(访问被拒绝)