c++ - 如何找出全局变量是否已在 C++ 中更改?

标签 c++

我有一个愚蠢的问题!假设您有一个在整个项目中使用的全局变量,并且您打算在它发生变化时执行某些操作,例如调用一个函数。
一种简单的方法是在每次更改后调用您的函数。但是,如果这个全局变量是库的一部分并将在外部使用怎么办。有没有更好的解决方案?

最佳答案

大概您想知道您的变量何时被修改, 不跟踪对它的引用并重写所有依赖于它的代码。

为此,将您的变量从现在的任何内容更改为重载 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 的所有更改的日志。

关于c++ - 如何找出全局变量是否已在 C++ 中更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14652900/

相关文章:

c++ - 编译器显示错误消息 "makes pointer from integer without cast"(反转数组)。我该如何解决这个问题?

c++ - C++生成随机数的代码

c++ - 如何返回不可 move (但可复制)的对象?

c++ - 为什么 `PSHUFD` 指令没有浮点内在函数?

c++ - 'const T*' 是 cv 未限定的类型吗?

c++ - 在 Qt 中 QFile::copy(source, dest) 的实现有时是错误的吗?

c++ - 如何在 OpenGL 中将文本渲染到正方形(4 个顶点)上?

std::map::insert 处的 C++ 段错误

c++ - 将 "binary string"转换为 "const char*"以发送(网络服务器)

c++ - PVS-Studio 不处理头文件