我有一个愚蠢的问题!假设您有一个在整个项目中使用的全局变量,并且当它发生变化时您将做一些事情,例如调用一个函数。
一种简单的方法是在每次更改后调用您的函数。但是,如果这个全局变量是库的一部分并且将在外部使用怎么办。有没有更好的解决方案?
问问题
1326 次
5 回答
8
大概你想找到你的变量何时被修改,而不需要追踪对它的引用并重写所有依赖它的代码。
为此,请将您的变量从现在的任何内容更改为重载的类类型operator=
,并在发生更改时打印/记录/任何更改。例如,假设您当前拥有:
int global;
并想知道何时更改global
:
class logger {
int value;
public:
logger &operator=(int v) { log(v); value= v; return *this; }
// may need the following, if your code uses `+=`, `-=`. May also need to
// add `*=`, `/=`, etc., if they're used.
logger &operator+=(int v) { log(value+v); value += v; return *this; }
logger &operator-=(int v) { log(value-v); value -= v; return *this; }
// ...
// You'll definitely also need:
operator int() { return value; }
};
并将 替换为int global;
以logger global;
获取对 的所有更改的日志global
。
于 2013-02-01T19:04:58.963 回答
4
我想说最简单的方法是为调用函数的变量创建一个 set 方法并让它公开,而变量本身保持私有:
//public
void setYourVariable(int newValue)
{
YourVariable = newValue;
YourFunction();
}
//private
int YourVariable;
于 2013-02-01T18:40:49.823 回答
2
您需要创建一个访问器函数来设置全局变量。然后,您可以从该访问器调用您的特殊函数,而不是要求所有调用者自己做。
于 2013-02-01T18:40:17.983 回答
1
只是为了回答实际问题:不,没有办法确定 C++ 中的“变量何时更改”。从技术上讲,如果你有足够的权限并且硬件支持它,你可以为你的变量的地址设置一个“写断点”。但这只是一种非常迂回的方法,可以通过重命名变量来轻松实现,然后修复访问变量的所有位置以调用函数来更新值,如果合适的话还可以同时调用函数时间 - 正如几个答案中所建议的那样。
于 2013-02-01T18:43:55.093 回答
0
由于您说它也可能从外部调用,正如 Kevin 所说,拥有 Get() 和 Set(...) 方法很好。主要有2个优点。1)通过集合,您可以在值更改时调用函数或执行操作。2)您可以避免直接将变量直接暴露在外部。
于 2013-02-01T18:59:04.270 回答