[英]C++ Overload operator% for two doubles
是否可以为两个双打重载operator%
?
const double operator%(const double& lhs, const double& rhs)
{
return fmod(lhs, rhs);
}
当然,这会产生错误,因为两个参数之一必须具有 class 类型。 所以我考虑利用隐式构造函数调用 C++ 的可能性来解决这个问题。 我是通过以下方式做到的:
class MyDouble {
public:
MyDouble(double val) : val_(val) {}
~MyDouble() {}
double val() const { return val_; }
private:
double val_;
};
const double operator%(const MyDouble& lhs, const double& rhs)
{
return fmod(lhs.val(), rhs);
}
const double operator%(const double& lhs, const MyDouble& rhs)
{
return fmod(lhs, rhs.val());
}
... 和:
double a = 15.3;
double b = 6.7;
double res = a % b; // hopefully calling operator%(const MyDouble&, const double) using a implicit constructor call
不幸的是,这不起作用,任何提示,想法。 ..,不胜感激! 在此先感谢,乔纳斯
这不起作用的原因是,只有当表达式的至少一个操作数具有 class 或枚举类型时,才会触发用户定义的运算符函数的重载决议。
所以你运气不好。 这行不通。
我认为您可以尝试的最好的方法是等待 C++0x 编译器,而不是编写3.14
,而是编写3.14_myd
,作为用户定义的文字。
或者,实现double MyDouble::operator%(const double&) const;
,像这样:
#include <iostream>
#include <cmath>
class t_double {
public:
t_double(const double& val) : d_val(val) {
}
t_double(const t_double& other) : d_val(other.d_val) {
}
~t_double() {
}
const double& val() const {
return this->d_val;
}
double operator%(const double& rhs) const {
return fmod(this->val(), rhs);
}
double operator%(const t_double& rhs) const {
return fmod(this->val(), rhs.val());
}
private:
double d_val;
};
int main(int argc, char* const argv[]) {
const t_double a(15.3);
const t_double b(6.7);
std::cout << a % b << " == " << a.val() << " % " << b.val() << "\n";
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.