相同的接口对象句柄(切片和pimpl)

时间:2016-04-08 19:05:14

标签: c++

我想创建一小组类来封装HTML内容。 例如,我需要这样的东西:

struct Document
{
  ...
  std::string content;

  Document& operator<<(Element const& elem)
  {
     content += elem();
    return *this;
  }
};

,例如:

struct Href
{
 ...
  std::string operator()() const
  {
    return "<a>example</a>";
  }
}

struct Div
{
 ...
  std::string operator()() const
  {
    return "<div></div>";
  }
}

我知道pimpl成语 - 以及对象切片。 但有没有办法创建一些类似于存档的思想:

...
Document doc;
doc << Href << Div;

或者我误解了什么?

1 个答案:

答案 0 :(得分:1)

  

或者我误解了什么?

嗯,你的面向流的方法根本不代表像HTML这样的分层文档(它的新形式可以是XML方言);你会怎样建模,让我们说一个div里面的一个链接,一个div之后的链接?

我不知道这里的pimpl成语是如何适用的;它不会帮助您将分层格式转换为线性形状。你有一些方法;例如,您可以将()重载为HTML元素类的基本类型的参数以实现层次结构,但除此之外还有问题:

您已经通过定义实际包含详细类(&#34; impl&#34;)应该执行的操作符来打破它。

Pimpl强迫您更清楚地区分API和功能;没有什么可以帮助你使用文档生成器。