为什么是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对流所做的事情。显然,一个人可以整天骑自行车,但这里的问题不是为什么我们有format和print (这对我来说是很能解释的),而是为什么有一个清晰的函数(?)类似于写入流类型的行为已经与format_...命名风格捆绑在一起。
因此,正如问题标题所问的,在对流进行格式化时,与fmt::format_to(OutputIt, ...)在格式化输出迭代器时的行为是否存在技术上的差异?
还是这纯粹是一种风格选择?此外,考虑到GitHube回购在这里显式地列出了fmt标记,我希望我们能够从最初的API作者那里得到一个权威的答案。
发布于 2021-07-01 16:40:11
虽然可以将format_to print命名为format,但前者在概念上更接近format而不是print。format_to是format的一个推广,它通过输出迭代器而不是std::string来写入输出。因此,命名反映了这一点。
另一方面,没有流参数的print用参数写入stdout和print,将其推广到任意流。写入流与写入输出迭代器是根本不同的,因为它涉及额外的缓冲、同步等。其他语言通常对这种功能使用"print“,因此{fmt}遵循此约定。
这变得模糊了,因为您可以有一个写入流的输出迭代器,但是即使在那里,当前的命名也反映了正在使用的高级API。
换句话说,format_to基本上是一个花哨的STL算法(甚至有类似于copy/copy_n的format_to_n ),而print是一个格式化的输出函数。
https://stackoverflow.com/questions/68200618
复制相似问题