c++ - 对象可能修改的函数

标签 c++ oop class c++11

我有一个 C++ 对象。

它的一些函数不改变对象并且被限定为const

其他函数确实对对象进行了更改,这会导致重新计算多个值。

我的问题是在 C++ 或 C++11 中是否存在一些特殊的类方法,如果使用非常量方法,它会自动调用。

如果不是,为什么会这样?

最佳答案

简短的回答是不,该语言没有任何直接支持它的东西。

您至少仍然可以做一些事情来集中代码以跟踪您的参数是否已更改。例如,您可以编写一个小模板,如下所示:

template <class T>
class param {
    T value_;
    bool clean_;
public:
    param(T v) : value_(v), clean_(false) {}

    param &operator=(param &other) { value_ = other.value; clean_ = false; return *this; }

    param &operator=(T const &t) { value_ = t; clean_ = false; return *this; }

    operator T() { return value_; }    

    void clean() { clean_ = true; }

    bool isclean() { return clean_; }
};

然后你会有这样的东西:

class integrator { 
    double value;
    param<double> a, b, c;

    double calculate_value(double a, double b, double c);

public:
    double operator()() { 
        if (a.isclean() && b.isclean() && c.isclean())
            return value;
        value = calculate_value(a, b, c);
        a.clean();
        b.clean();
        c.clean();
        return value;
    }
};

这不会自动执行整个过程,但可以让您隔离代码,因此只有使用参数的函数需要跟踪它们是否是最新的——其余的代码可以只分配值,当它们这样做时,值会自动标记为脏。

关于c++ - 对象可能修改的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905028/

相关文章:

c++ - 如何简化 std::variant 类类型

c++ - 我如何对工厂进行单元测试?

javascript - 在javascript中将值设置为__proto_ _` and `原型(prototype)

python - 具有许多参数的对象的工厂方法

c++ - 将文件数据写入类中? C++

c++ - Boost.Intrusive Containers - 不同大小的元素

c++ - OpenCV 与 ROS 的链接问题

javascript - 尝试在 Javascript 中获取 "classes"以发挥良好的作用

java - 如何在 Object 类中创建 Next() 方法

oop - 帮我命名我的类(class)