更改变量后的C++自动调用函数

ste*_*fan 8 c++ function

c ++中是否有一个函数,当一个变量被改变时,它会自动调用一个函数?

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++中实现属性的方法.作为一个图书馆,没有语言的支持.

  • @ adf88:你是什么意思,"太复杂了"?如果你想做提问者所要求的,那么这就像它得到的一样简单.至于你的最后一点,编译器不直接支持可调整大小的数组,函数对象,智能指针,模板元编程或许多其他概念,这些概念已经成为通用(甚至标准)C++习语,通过编写代码来"模拟"它们. (3认同)

Vik*_*ehr 9

总而言之; 没有.

但是你应该做的是将变量包装到一个类中(我不打算建议运算符重载),并通过set(...)函数进行更改.然后你只需从set函数调用该函数.