gpt4 book ai didi

c++ - 变量变化时自动调用函数

转载 作者:可可西里 更新时间:2023-11-01 17:00:30 29 4
gpt4 key购买 nike

C++ 有没有办法在变量值改变时自动调用函数?

最佳答案

Is there a function in c++ that when a variable got changed it automatically call a function?

不,不是我能想到的。但是,您可以将对变量的访问包装在一个合适的包装器中,这样您就可以 Hook 赋值。
像这样:

//Beware, brain-compiled code ahead!
template<typename T>
class assignment_hook {
public:
typedef void (hook_t)(const T& old_value, const T& new_value);

assignment_hook(T& value, hook_t hook) : ref_(value), hook_(hook) {}

T& operator=(const T& rhs)
{
hook_(ref_,rhs);
ref_ = rhs;
}
private:
// I'd rather not want to think about copying this
assignment_hook(const assignment_hook&);
void operator=(const assignment_hook&);

T& ref_;
hook_t hook_;
};

正如 Noah 在评论中指出的那样,

typedef boost::function<void(const T&,const T&)> hook_t;

(或者,如果你的编译器有它,std::tr1::functionstd::function )会大大改进它,因为它允许调用各种“兼容”函数。 (例如,它可以使用 boost/std::/tr1::bind<> 调用成员函数等各种魔法。)

另请注意,正如 adf88 在他的评论中所说,这只是执行所要求的(监视对变量的写入访问),绝不是一个完整的属性实现。事实上,尽管 C++ 的态度是尽可能多地在库中实现而尽可能少地在语言中实现,尽管许多人(其中一些人相当聪明)进行了尝试,但没有人找到在 C++ 中实现属性的方法作为一个库,没有语言的支持。

关于c++ - 变量变化时自动调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159165/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com