使用#define和自己的类

时间:2017-05-15 09:50:24

标签: c++

带浮点的C ++模运算符。 我知道模数%运算符只能用于两个操作数都是整数,如果有人试图使用浮点数,它会导致编译错误。

error C2296: '%' : illegal, left operand has type 'double'

然而,我在某些情况下,我没有控制和代码执行浮动%浮动导致编译问题 因此我尝试创建自己的dbl minimalist类来实现相同的目的。

// testMod.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "math.h"
class DBL{

public:
    bool lastError;
    float dbl;
    DBL()
    {
        dbl = 0.0;
    }
    DBL(float b)
    {
        dbl = b;
    }
    /*float operator % (float t)
    {
        return fmod(dbl, t);
    }*/
    operator float()
    {
        return dbl;
    }

    friend float operator % (DBL a, DBL b);
};


float operator % (DBL a, DBL b)
{
    return fmod(a.dbl, b.dbl);
}



#define  float DBL

int main(int argc, _TCHAR* argv[])
{
    float temp;
    float a = 3.24;
    float b = 4.32;
    temp = a % b ;
    temp = 0;
    temp = a % b;
    temp = 3.14 % 5.01; // compilation error here
    return 0;
}

无法编译。我希望使用隐式转换,但它似乎并没有这样做。如果一个人只处理自己并依赖于其他一切的默认转换,那么这也是一个极简主义的转换吗?

1 个答案:

答案 0 :(得分:-1)

我认为您应该将值转换为整数,以便支持输入。 (int)foo是最简单的转化,但对您来说可能不够。如果它不能满足您的需求,那么您需要编写自己的自定义转换。如果这种方法无法解决您的问题,那么您将需要修改库的源代码(通过逆向工程,如果合法和必要),或者,如果不是一个选项,请要求作者使用{{1} } 在图书馆。你的想法很聪明,但不幸的是,事情并非如此。