c++ - 使用 std::streams 格式化输出

标签 c++ format stream std

我有一个我希望能够流式传输的对象。但是我希望能够通过使用不同的格式以不同的方式流式传输它,或者我应该说描述这个对象的方法。我想知道这应该如何用流来解决。

我想要的是能够使用通用格式并使用某种格式适配器将通用格式转换为首选格式。

我还希望能够将格式与 Item 的实现分开,这样我就不必在每次添加或更改新格式时都更改 Item。

这段代码大致说明了我想要什么。

Item item;
std::cout << "generic formatted:" << item;
std::cout << "custom formatted:" << CustomItemFormat() << item;

但这可能是不可能的或不切实际的。

面对这样的问题,流媒体库打算如何使用?

最佳答案

我个人会写一套格式化程序。
格式化程序必须知道他们正在格式化的对象的内部结构 但是让他们成为 friend 应该没什么大不了的。

class X
{ friend std::ostream& operator<<(std::ostream& str,XML_Format const& formatter);
  friend std::ostream& operator<<(std::ostream& str,Json_Format const& formatter);
  friend std::ostream& operator<<(std::ostream& str,Fred_Format const& formatter);
  public: int value() const {return 5;}
};
struct XML__Foram   { X const& print; XML_Format(X const& v):   print(v) {} };
struct Json_Format  { X const& print; Json_Format(X const& v):  print(v) {} };
struct Fred_Format  { X const& print; Fred_Format(X const& v):  print(v) {} };

std::ostream& operator<<(std::ostream& str,XML_Format const& formatter)
{
     return str << "<XObj>" << formatter.print.value() << "</XObj>";
}
std::ostream& operator<<(std::ostream& str,Json_Format const& formatter)
{
     return str << "{XObj:{" << formatter.print.value() << "}}";
}
std::ostream& operator<<(std::ostream& str,Fred_Format const& formatter)
{
     return str << "Killl Kill Kill. Friday 13th";
}

int main()
{
     X   obj;
     std::cout << XML_Format(obj) << std::endl;
}

关于c++ - 使用 std::streams 格式化输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2171891/

相关文章:

java - 如何将一位数整数变成两位数

android - 如何使用 Bing 翻译服务在 android 上播放特定单词的音频?

c++ - 区分getline中的定界符和换行符

c++ - 可变参数模板的无递归扩展到数组访问

C++多重定义 'using'别名

c# - 可变 String.Format 长度

java - Eclipse Java 格式化程序中的换行

c# - 为什么处理 StreamReader 会使流不可读?

c++ - Eclipse Indigo C++ 的指标

c++ - 在整个程序执行过程中存储文件句柄有什么缺点吗?