c++ - 使结构的所有数学运算符都操作同一个成员

标签 c++ struct operators

我有一个包含 double 和几个标志的结构,但我想在我的代码中使用它,就好像它只是那个 double 一样。有没有办法简化下面的代码,以便在这个结构的实例上执行的所有数学运算符都在包含的 double 上执行?我的代码可以运行,但我怀疑 C++ 有一个非常优雅且简短的解决方案来解决我的问题。

struct SomeStruct
{
    double value;
    bool someFlag;
    bool someOtherFlag;

    operator double(){return value;}

    void operator=(double newValue){value = newValue;}
    void operator+=(double valueToAdd){value += valueToAdd;}
    void operator-=(double valueToSubtract){value-= valueToSubtract;}
    void operator/=(double divisor){value /= divisor;}
    void operator*=(double multiplier){value *= multiplier;}
    double operator+(double valueToAdd){return value + valueToAdd;}
    ...
}

最佳答案

如果将转换运算符改为operator double &,则double上的所有运算符都免费获得,operator=除外>:

#include <iostream>

struct Foo {
    double d;
    bool flag;

    Foo() : d(0), flag(false) {}

    operator double &() { return d; }
};

int main()
{
    Foo x;  // initialized to (0, false)
    x.flag = true;
    x += 1.1;
    std::cout << x.d << " " << x.flag << std::endl;
    x *= 2;
    std::cout << x.d << " " << x.flag << std::endl;
}

打印

1.1 1
2.2 1

(第二个输出是 flag)。

仍然值得定义 operator double() const

关于c++ - 使结构的所有数学运算符都操作同一个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24245601/

相关文章:

c++ - 类型转换 C++

c++ - 将 C++ 链接到静态库; undefined reference 错误

c++ - 在构造函数中填充类指针 vector

c - Scanf 未按预期运行

c - 按出生日期对患者结构进行排序

c++ - 在 C++ 中,有没有办法在编译时更改函数原型(prototype)?

c - 从文件中获取行,放入结构数组,打印内容(作业)

go - golang中的 bool 值没有异或运算符吗?

Bash 操作符 : "!" vs "-z"

java - BigInteger 和 BigDecimal 的平方根和++ 运算符