C++类函数能否判断自上次调用以来,类成员对外部类的引用是否已更新
Can a C++ class function tell whether the class member reference to an outside class has been updated since last call?
假设我有两个类:
A类:
class A
{
private:
int _i;
public:
A(int i){_i=i;}
void update(int t){_i=t;}
friend class B;
};
B类:
class B
{
private:
A &_a;
public:
void respond();
B(A &);
};
B::B(A & a)
:_a(a)
{}
void
B::respond()
{
/*
if (a._i has been updated after last call of B::respond)
{
do something
}
else
{
do nothing
}
*/
}
是否有任何方法可以在C++/C++11中实现B::respond()
中描述的任务?_i
被指针取代,B::respond()
需要响应指针的内容,这又如何呢?
注意,我不能修改类A
。
有两种方法可以实现这一点:
- 将
a._i
的值保存在B::respond()
函数中,并在下一次B::respond()
调用中与该值进行比较 - 调用
A::update
时设置一些内部标志。调用B::respond()
时,请检查该标志并取消设置
没有办法直接查看成员是否已被访问或更新,但有一些间接技术。您可以做一些简单的事情,比如在类a中有一个bool _i_updated;
。然后,在a::update(int(函数内部,只需在每次调用该函数时设置_i_updated = true;
。CCD_ 12可以检查CCD_ 13,然后每次发现CCD_。
您可以将成员变量A::_i
的值保留为class B
:的成员
class B
{
private:
A &_a;
int _i;
public:
void respond();
B(A &);
};
B::B(A & a)
:_a(a), _i(a.i)
{}
因此:
void
B::respond()
{
if (_i != a._i) {
// do something
}
else
{
// do nothing
}
_i = a._i;
}
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 嵌套在类中时无法设置成员数据
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 将函数类成员映射到类本身内部
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- 多成员Constexpr结构初始化
- 作为类成员持有对外部对象的引用的优点/缺点