代码之家  ›  专栏  ›  技术社区  ›  Alessandro Muntoni

消除指向重载常量成员函数和成员运算符的指针的歧义

  •  2
  • Alessandro Muntoni  · 技术社区  · 5 年前

    我有一个小类,具有以下成员函数:

    class Point3 {
        Point3 operator - (Point3 const & p) const {...} 
        Point3 operator - () const {...}
    
        const float &x() const {...}
        float& x() {...}
    }
    

    &Point3::operator- &Point3::x

    在网上看到类似的问题时,我得出结论,进行这种类型的类型转换的语法是 (ReturnType (Class::*)(Args...)) &Class::Function . 但是,我尝试使用二进制运算符-但没有成功。

    (Point3 (Point3::*)(Point3 const &)) &Point3::operator-
    

    给予 error: address of overloaded function 'operator-' does not match required type 'Point3 (const Point3 &)' note: candidate function has different qualifiers (expected unqualified but found 'const') [...]

    对于 x()

    1 回复  |  直到 5 年前
        1
  •  2
  •   HolyBlackCat    5 年前

    编译器很好地告诉你到底出了什么问题。你忘了 const :

    (Point3 (Point3::*)(Point3 const &) const) &Point3::operator-
    //                                  ^~~~~
    

    为了 x 常量

    (const float &(Point3::*)() const) &Point3::x