引用自定义容器的C ++观察器模式

大卫高

我有一个自定义容器(“主题”),许多其他类都在观察它。更改容器后,将在更改后将通知推送给所有观察者。例如,对于调整大小,处理流程如下

std::vector<double> vec;

void resize(size_t n)
{
    vec.resize(n);          //first resize
    notify(Event::RESIZE);  //afterwards inform observers about the resize event
}

现在,当我通过引用访问更改容器的元素时,看不到明显的方法来进行通知:

double& operator[](size_t i)
{
    notify(Event::CHANGE_ELEMENT);  //no way to notify afterwards, so notify before
    return vec[i];
}

因此,当我将元素更改为

containerObject[2] = 1.1;

观察者会收到有关旧状态的通知,该状态仅在通知后更新

是否有解决方法(不是使用setter方法)?

氯化钠

进行某种辅助类,只需将通知推送到销毁即可。

struct MyHelper
{
    //This is may be a friend of your container

    MyHelper(std::size_t index, MyCustomContainer& ref)
     : _index(index), _ref(ref)
    {  }

    ~MyHelper()
    { notify(Event::CHANGE_ELEMENT); }

    double& operator=(double rhs)
    { _ref._vec[_index] = rhs; }

private:
    std::size_t _index;
    MyCustomContainer _ref;
};

您可以在操作员中执行以下操作:

MyHelper MyCustomContainer::operator[](size_t i)
{
    MyHelper m(i, *this);
    return m;

    // MyHelper Destructor called
}

在线尝试

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义容器上的C ++“定期”迭代器

来自分类Dev

使用自定义容器控制器实现自定义转换

来自分类Dev

使用自定义容器控制器实现自定义转换

来自分类Dev

同一容器的多个自定义迭代器

来自分类Dev

如何使用属性观察器中提供的自定义?

来自分类Dev

带自定义类的引用-reactdate选择器

来自分类Dev

C ++:自定义删除器状态

来自分类Dev

如何创建引用的自定义容器?

来自分类Dev

引用可观察到的自定义html id的敲除

来自分类Dev

iOS 7:自定义容器视图控制器和内容插入

来自分类Dev

Docker容器上的解析服务器的自定义身份验证(OAuth2)

来自分类Dev

对自定义STL兼容的容器和迭代器进行单元测试

来自分类Dev

如何“取消”视图外观转换以进行自定义容器控制器转换

来自分类Dev

Spring MockMvc-自定义验证器未在Spring容器中注册/调用

来自分类Dev

Aurelia与父解析器的自定义绑定未注入正确的容器

来自分类Dev

设计器弄乱了启用设计的自定义 UserControl 子容器的位置和大小

来自分类Dev

如何在 PhpStorm 文件观察器中编写自定义输出路径

来自分类Dev

Xamarin Forms - iOS 自定义渲染器 - 处理观察者

来自分类Dev

自定义可观察集合android

来自分类Dev

自定义高阶可观察映射

来自分类Dev

C#中的观察者模式

来自分类Dev

实现C ++ -lua观察者模式?

来自分类Dev

实现观察者模式C ++

来自分类Dev

C# 实现可观察模式

来自分类Dev

C ++自定义列表迭代器错误

来自分类Dev

C ++自定义迭代器和范围问题

来自分类Dev

C ++中的最小堆自定义比较器

来自分类Dev

C ++ STL设置自定义比较器

来自分类Dev

迭代器擦除 C++ 的自定义实现

Related 相关文章

热门标签

归档