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