2017-01-26 14 views
1

我不明白如何使用boost::flyweight作为GOF模式。有什么地方存在的例子吗?如何使用boost :: flyweight作为GOF模式?

例如,我期望它的用法如下。必须有一些轻量级容器,它们是“胖”对象。这个容器可以为某些对象提供一些轻量级的“持有者/描述符”。我可以将描述符存储在某个容器中。

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

回答

1

模式实现不需要将1:1映射到原始模式描述。这是好东西,因为可以使用GoF正在使用的任何一组功能中不具备的语言功能,以使该实现更具性能,更简洁,更易维护等等。

The boost::flyweightis the "lightweight holder/descriptor"

Boost.Flyweight可以很容易地通过提供类模板flyweight<T>,它作为一个下拉更换为const T使用常见的编程方法。

+0

我还没有得到。例如,在文本编辑器的情况下,我需要包含用户输入的eath字母的“描述符”列表的容器。那么如何用boost来实现呢?它必须是flyweigts的列表? (std :: list > line;) – AeroSun

+0

@AeroSun如果您查看文档中的示例,如[this one,about formatted text processing](http://www.boost.org/doc /libs/1_63_0/libs/flyweight/example/html.cpp),你会发现它们的确如此:'typedef flyweight character; std :: vector scanned_html;' – milleniumbug

+0

Thx很多!现在我明白了。它与GoF模式有所不同。 boost实现看起来非常简单,但我不确定是否可以访问内部对象存储库。 – AeroSun