是否有打印可选值的约定?

时间:2011-08-09 14:43:28

标签: c++ string printing operator-overloading optional

假设我想为operator<<类模板重载optional<T>。如何打印“缺席值”,以及如何打印“真实值”x?

none
some x

[]
[x]

或者我应该为第一种情况打印任何内容,第二种情况下是x?这通常如何处理?

6 个答案:

答案 0 :(得分:1)

我喜欢打印NoneSome x的选项。我认为这会立即描述正在发生的事情(特别是熟悉Haskell的人)。

就个人而言,我不会使用[][x]替代方案,因为许多语言使用方括号来表示某种列表。如果我要看到那个输出,我会立即想到打印了一个列表,而不是可选类型。

答案 1 :(得分:1)

在没有任何上下文的情况下,我会认为一个可选的集合是一个特殊情况,它可以是空的,也可以是一个成员。

您可能已经有了如何打印集合或复合对象的约定,但{}如果它为空则为{x},如果它具有值x似乎是合理的。如果将空向量打印为none,将带有三个元素的向量打印为some x y z,则无论如何都将相同的约定应用于可选类型: - )

答案 2 :(得分:0)

我不知道任何具体的约定。我个人会在缺少值时打印(null),否则打印实际值。

答案 3 :(得分:0)

这取决于类型。如果要打印字符串,可以是“”或“Fred”。如果是数组,则可以是{}或{1,2,3}。

关注此视频或网页中附带的代码可以为您提供帮助。 Pretty Printer

答案 4 :(得分:0)

行为的选择应该基于您实现输出运算符的原因。如果它主要用于调试目的,则提供缺少值的视觉线索非常重要。如果缺少值,则在方括号之间或仅打开和关闭括号之间打印现有值是一种有效的方法,因为方括号通常用于表示选项,例如,在命令帮助消息。

另一方面,如果这是一个通用输出操作符,最好的方法可能是打印现有值,就像打印非可选底层类型一样,空字符串打印缺失值。

答案 5 :(得分:0)

The UNIX and the Echo.

在新泽西州居住着UNIX,这是一位公平的女仆,他们的学生们远远地去钦佩。由于她的纯洁而感到眼花缭乱,所有人都试图揭露她,一个是为了她的处女恩典,一个是另一个优雅的文明,另一个是因为她敏捷地执行严格的任务,即使在更富裕的土地上也很少完成。如此大的心和容纳自然的是,UNIX采用了除了不屈不挠的追求者之外的所有人。很快,许多后代成长并繁荣并扩散到地球的尽头。

大自然亲自微笑,并且比其他凡人更热切地回答UNIX。那些不太懂礼貌的谦卑民众对她的回声感到高兴,如此精确而清澈透明,他们几乎不相信她可以用同样的石头和树林来回答,这些石头和树林将他们自己的吼叫声塞进旷野。符合规定的UNiX必须完美回应她所要求的一切。当一个不耐烦的swain向UNIX询问“没有回声”时,UNIX有义务地张开嘴,没有回应,并再次关闭它。

'你的意思是什么,'年轻人要求',这样张开嘴?从此以后,当你不应该回声时,永远不要张开嘴! UNIX迫不及待。

'但是我想要一个完美的表演,即使你什么都不回应,'一个敏感的年轻人恳求道,'并且没有回声可以来自闭口。不想得罪任何一个,UNIX同意对不耐烦的年轻人和敏感的年轻人说不同的话。她把敏感的东西称为'\ n'。'

然而现在,当她说'\ n'时,她真的没有说什么,所以她不得不两次张开嘴,一次说'\ n',一次不说话,所以她不喜欢敏感青年人,他们立刻说道,“这对我来说听起来像是完美的,但是第二次毁了它。我希望你收回他们中的一个。所以无法忍受犯罪的UNiX同意撤消一些回声并称之为'\ c'。现在敏感的年轻人可以通过一起要求'\ n'和'\ c'听到完美的回音。

但是他们说他在听过之前就已经因为过多的记法而死了。

- Doug McIlroy