我刚刚读到了关于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);
这看起来好得令人难以置信.有捕获吗?你有过好的,坏的或无所谓的经历吗?
FastFormat有"捕获"吗?
我上次检查时,有一个令人讨厌的问题:
您只能使用两种窄字符串版本或该库的宽字符串版本.(函数wchar_t
和函数char
相同 - 使用哪种类型是编译时开关.)
使用iostreams,stdio或Boost.Format,你可以同时使用它们.
找到一个"捕获",但对大多数人来说,它永远不会显现.从项目页面:
原子操作. 它不会像IOStream一样一次写出一个语句元素,因此没有原子性问题
我能看到这种情况的唯一方法是它是否缓冲整个write()
调用的输出本身,然后将其写入ostream
一步.这意味着它需要分配内存,如果传入write()
调用的对象产生大量输出(几兆字节或更多),它可以消耗内部缓冲区中多达两倍的内存(假设它使用增长缓冲区) - 每次大小 - 每次大小的技巧).
如果您只是将它用于日志记录,而不是倾倒大量的XML,那么您将永远不会看到这个问题.
我看到的唯一其他"捕获"是:
高度便携.它将适用于所有优秀的现代C++编译器; 它甚至适用于Visual C++ 6!
因此,它不适用于旧的C++编译器cfront
,而是iostreams
向后兼容80年代后期.如果有人对此有任何问题,我会感到惊讶.