首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ fmt的技术背景::打印还是fmt::format_to命名?

C++ fmt的技术背景::打印还是fmt::format_to命名?
EN

Stack Overflow用户
提问于 2021-06-30 19:27:48
回答 1查看 852关注 0票数 4

为什么是fmt::format_to(OutputIt, ...)而不是fmt::print(OutputIt, ...)

我目前正在熟悉{fmt},这是一个/现代的C++格式库。

在浏览API时,我发现命名有点不连贯,但是考虑到我对这个库的一点经验(以及我对API设计的兴趣),我想在这些命名选择后面:(fmt核心API参考)

  • 有一个有意义的fmt::format(...) -> std::string,它返回一个格式化的字符串。
  • 然后我们有了void fmt::print([stream, ] ...),它也是明智的命名(当然,考虑到printf遗留的内容)。
  • 但是,除了返回类型之外,我们还有fmt::format_to(OutputIt, ...) -> OutputIt,它类似于print对流所做的事情。

显然,一个人可以整天骑自行车,但这里的问题不是为什么我们有formatprint (这对我来说是很能解释的),而是为什么有一个清晰的函数(?)类似于写入流类型的行为已经与format_...命名风格捆绑在一起。

因此,正如问题标题所问的,在对流进行格式化时,fmt::format_to(OutputIt, ...)在格式化输出迭代器时的行为是否存在技术上的差异?

还是这纯粹是一种风格选择?此外,考虑到GitHube回购在这里显式地列出了fmt标记,我希望我们能够从最初的API作者那里得到一个权威的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-01 16:40:11

虽然可以将format_to print命名为format,但前者在概念上更接近format而不是printformat_toformat的一个推广,它通过输出迭代器而不是std::string来写入输出。因此,命名反映了这一点。

另一方面,没有流参数的print用参数写入stdoutprint,将其推广到任意流。写入流与写入输出迭代器是根本不同的,因为它涉及额外的缓冲、同步等。其他语言通常对这种功能使用"print“,因此{fmt}遵循此约定。

这变得模糊了,因为您可以有一个写入流的输出迭代器,但是即使在那里,当前的命名也反映了正在使用的高级API。

换句话说,format_to基本上是一个花哨的STL算法(甚至有类似于copy/copy_nformat_to_n ),而print是一个格式化的输出函数。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68200618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档