【问题标题】:How to use boost::flyweight as a GOF pattern?如何使用 boost::flyweight 作为 GOF 模式?
【发布时间】:2017-01-26 12:06:13
【问题描述】:

我不明白如何将boost::flyweight 用作 GOF 模式。某处有没有例子?

例如,我希望它以下列方式使用。必须有一些轻量级容器,其中包含“胖”对象。这个容器可以为某些对象提供一些轻量级的“持有者/描述符”。我可以将描述符存储在某个容器中。

我不明白如何从boost::flyweight 接收对象的“持有者/描述符”。

【问题讨论】:

    标签: c++ boost boost-flyweight gang-of-four


    【解决方案1】:

    模式实现不需要将 1:1 映射到原始模式描述。这是一件好事情,因为可以利用 GoF 使用的任何一组功能中不可用的语言功能,以使该实现更高效、更少冗长、更可维护等等,等等。

    The boost::flyweight is the "lightweight holder/descriptor":

    Boost.Flyweight 通过提供类模板flyweight<T>(作为const T 的替代品)使使用这个常见的编程习惯变得容易。

    【讨论】:

    • 我还是不明白。例如,在文本编辑器的情况下,我需要包含用户输入的字母的“描述符”列表的容器。那么如何用 boost 来实现呢?它必须是flyweigts的列表吗? (std::list<:flyweight>> 行;)
    • @AeroSun 如果您查看文档中的示例,例如 this one, about formatted text processing,您会发现他们正是这样做的:typedef flyweight&lt;character_data&gt; character; std::vector&lt;character&gt; scanned_html;
    • 非常感谢!现在我明白了。它与 GoF 模式太不同了。 boost 实现看起来使用起来很简单,但我不确定我没有访问内部对象存储库是否好。
    猜你喜欢
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多