当前位置:  开发笔记 > 编程语言 > 正文

FastFormat有"捕获"吗?

如何解决《FastFormat有"捕获"吗?》经验,为你挑选了2个好方法。

我刚刚读到了关于FastFormat C++ i/o格式库的文章,看起来好得令人难以理解:甚至比printf更快,类型安全,以及我认为令人满意的界面:

// prints: "This formats the remaining arguments based on their order - in this case we put 1 before zero, followed by 1 again"
fastformat::fmt(std::cout, "This formats the remaining arguments based on their order - in this case we put {1} before {0}, followed by {1} again", "zero", 1);

// prints: "This writes each argument in the order, so first zero followed by 1"
fastformat::write(std::cout, "This writes each argument in the order, so first ", "zero", " followed by ", 1);

这看起来好得令人难以置信.有捕获吗?你有过好的,坏的或无所谓的经历吗?



1> Martin Ba..:

FastFormat有"捕获"吗?

我上次检查时,有一个令人讨厌的问题:

您只能使用两种窄字符串版本该库的宽字符串版本.(函数wchar_t和函数char相同 - 使用哪种类型是编译时开关.)

使用iostreams,stdio或Boost.Format,你可以同时使用它们.



2> Mike DeSimon..:

找到一个"捕获",但对大多数人来说,它永远不会显现.从项目页面:

原子操作. 它不会像IOStream一样一次写出一个语句元素,因此没有原子性问题

我能看到这种情况的唯一方法是它是否缓冲整个write()调用的输出本身,然后将其写入ostream一步.这意味着它需要分配内存,如果传入write()调用的对象产生大量输出(几兆字节或更多),它可以消耗内部缓冲区中多达两倍的内存(假设它使用增长缓冲区) - 每次大小 - 每次大小的技巧).

如果您只是将它用于日志记录,而不是倾倒大量的XML,那么您将永远不会看到这个问题.

我看到的唯一其他"捕获"是:

高度便携.它将适用于所有优秀的现代C++编译器; 它甚至适用于Visual C++ 6!

因此,它不适用于旧的C++编译器cfront,而是iostreams向后兼容80年代后期.如果有人对此有任何问题,我会感到惊讶.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有