我想创建一小类类来封装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;


还是我误会了什么?

最佳答案

还是我误会了什么?


嗯,面向流的方法根本无法表示像HTML这样的层次结构文档(以更新的形式可以是XML方言)。假设您将如何在div内建立一个链接,而在div之后建立一个链接?

我没有看到pimpl习惯用法在这里;它不会帮助您将分层格式设置为线性形状。您在这里有一些方法;例如,您可以将()重载为HTML元素类的基本类型的参数以实现层次结构,但这还不单是您的问题所在:

您已经通过定义实际包含明细类(“ impl”)应该执行的操作的运算符来打破它。

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

关于c++ - 相同的接口(interface)对象句柄(切片和pimpl),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36507396/

10-13 07:00