sbi*_*sbi 13
c ++中是否有一个函数,当一个变量被改变时它会自动调用一个函数?
不,不是我能想到的.但是,您可以在适当的包装器中包装对变量的访问,这允许您挂钩到赋值.
像这样的东西:
//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_;
};
Run Code Online (Sandbox Code Playgroud)
诺亚在评论中指出,
typedef boost::function<void(const T&,const T&)> hook_t;
Run Code Online (Sandbox Code Playgroud)
(或者,如果你的编译器有,std::tr1::function或者std::function)会大大改进,因为它允许调用各种"兼容"函数.(例如,它可以使用各种魔法boost/std::/tr1::bind<>来调用成员函数等等.)
另请注意,正如adf88在他的评论中所说,这只是做了所要求的(监视对变量的写访问)并且绝不是一个完整的属性实现.事实上,尽管C++的态度尽可能地在库中实现并尽可能少地在语言中实现,并且尽管许多人(其中一些人相当聪明)尝试过,但没有人找到在C++中实现属性的方法.作为一个图书馆,没有语言的支持.