C++赋值运算符助手

达留斯

我正在尝试用一些操作符编写一个 helper .h 文件。

主要是这样的

QVector3D &operator=(const someDataObj&data){
      QVector3D out(data[0],data[10],data[12]);
      return out;
}

但是当我尝试它时,我得到:错误 C2801:'operator =' must be a non-static member

如果我尝试:

Vector3D operator=(QVector3D &left, const someDataObj &other) {}

我得到:错误 C2801:'operator =' 必须是非静态成员

我只是输了...我怎么能正确地做到这一点?

编辑:我忘了提到,它的主要用途是将数据从 libraryA 转换为 libraryB。

逻辑材料

正如错误消息所解释的,赋值运算符只能定义为成员假设QVector3D来自Qt,因此您不能修改,另一方面,someDataObj是您定义的类型,您可以为该类型创建转换运算符如果不是这种情况,那么您必须通过非成员函数显式执行转换。

编辑:

语法library_a_data = library_b_data,但其中一种类型必须包含在您自己的中:

  1. private 遗产

    class MyVector3D : private QVector3D // do not allow implicit conversions
    // to the base class for safety, as the destructor is not virtual
    {
    public:
        using QVector3D::member_1;
        using QVector3D::member_n; // very tedious work of bringing the names back
    
        // hurray, you can define your assignment or conversion operator
    };
    
  2. 作品

    class MyVector3D
    {
        QVector3D m_data;
    
    public:
        auto member_1() { return m_data.member_1(); }
        auto member_n() { return m_data.member_n(); } // even more tedious
    
        // hurray, you can define your assignment or conversion operator
    };
    

但是,我认为这种转换应该是显式的,但是上面的代码应该已经足够令人沮丧了。我们是否可以认为这是一种改进,因为在某一时刻您必须转换为您的类型?我不这么认为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章