c++ - 重载小于不同类型的运算符

标签 c++ overloading operator-keyword

我正在尝试重载小于运算符,以便使用 vector::lower_bound 在 ClassA 类型的 vector 中找到最接近/最近的数字到给定的 double 。 如果我给它 2 个 ClassA 实例进行比较但不能与不同类型进行比较,我可以让它工作。

我有以下代码

double ClassB::findNearest()
{
     std::vector<ClassA> vec;
     std::vector<ClassA>::iterator low;
     low = std::lower_bound(vec.begin(),vec.end(), 20.0);

     if (low == vec.end())
     {
          return -1;
     }
     return *low;
}

-------------------------------------------- ------

class ClassA
{
public:
   ClassA(void);
   virtual ~ClassA(void);

   double one;
   double two;

    inline friend bool operator< ( const ClassA &cC1, const double &cC2)
    { 
         return cC1.one < cC2 ;
    };
};

我得到错误: 二进制“<”:未找到采用“const double”类型的左侧操作数的运算符(或没有可接受的转换)

...我不知道为什么当我从右到左重载运算符时。为什么我需要走另一条路?

非常感谢

亚历克斯

最佳答案

std::lower_bound正在寻找:bool operator< (const double& cC1, const ClassA& cC2)

您应该简单地在 ClassA 中定义 你会变成金子的:

bool operator< (const double& cC1, const ClassA& cC2)
{
    return cC1 < cC2.one;
}

编辑: leemes是的,这需要在您的 Class A 之外定义所以它可以访问 std::lower_bound .

关于c++ - 重载小于不同类型的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27131092/

相关文章:

asp.net-mvc - 如何在 .net mvc 中调用重载操作?

Javascript if语句和&&运算符的区别

swift - Swift 中左尖括号连字符 (<-) 的含义是什么?

c++ - 为什么要使用 float 而不是 double 或 double 而不是 long double?

c++ - JCuda全局共享内存导致错误

c++ - 分配给变量时数字改变值?

c++ - 二进制运算符的类型 'int' 和 'double(double*, double*, int)' 的操作数无效

c++ - 如何分配单独的内存来存储 secret 数据?

c++ - 如何在同一文件 C++ 中使用重载 []

ruby - 如何扩展 Ruby Enumerable 类 max_by 以忽略 nil?