我一直在阅读Alexandrescu的书《Modern C++ design》,他使用的技术给我留下了深刻的印象,所以我想在我的应用程序中添加Loki library。
然而,经过进一步的调查,我发现我已经在使用的boost提供了很多类似的功能(不是所有的,例如,我在boost中找不到一个单例)
我对使用loki最感兴趣的是基于策略的设计和函子。
对我来说,boost和loki各有利弊。我对loki的主要担忧是糟糕的文档(库不再与书绑定),但在我看来,loki在某些方面比boost更强大,更灵活(我可能错了)
在选择对函子和策略使用boost或loki之前,我想知道在真实的生活中使用它们的人的意见。
有时候,事情在纸上看起来很好,但当你真实的使用它们时会有一些缺点:)
4条答案
按热度按时间vltsax251#
Alexandrescu有一些非常有趣的想法(类型列表、基于策略的类模板等),但其中很多都在Boost中得到了改进沿着在更广泛的编译器中进行了可移植性和正确性测试。
仅仅因为这些原因,我建议在可能的情况下选择boost。“也就是说,现代C设计仍然提供了很多关于C灵活性的见解,并提供了一个人的思想(一个非常好的思想)来解决许多常见的编程问题。
例如,基于策略的智能指针是一个非常好的想法,但我们可以找到为什么boost的作者选择不以这种方式实现shared_ptr和scoped_ptr:
A.参数化会使用户气馁。shared_ptr模板经过精心设计,可以满足常见的需求,而无需进行大量的参数化。有一天,可能会发明一种高度可配置的智能指示器,它也非常容易使用,并且很难误用。在此之前,shared_ptr是各种应用程序的首选智能指针。(那些对基于策略的智能指针感兴趣的人应该阅读Andrei Alexandrescu的《现代C设计》。)
如果您确实需要各种各样的智能指针,并且您和您的团队能够轻松地广泛使用模板参数化,则可以使用基于策略的方法来实现智能指针。但是,scoped_ptr和shared_ptr(沿着weak_ptr)往往会非常彻底地完成这项工作。策略类的组合行为可能更好地用于存在多种有用组合的情况。
然而, Alexandria 雷斯库仍有一些有趣的建议没有得到推动。例如,MOJO在编译器更好地实现move构造函数之前,或者在我们可以使用C0x中的右值引用之前,仍然是非常有用的。他还对实现内存分配器有一些非常有趣的想法。
至于这个问题,我们在我们的商业项目中使用了Mojo所需的Loki的一部分,但主要是在适当的时候增强。
iyzzxitl2#
需要考虑的一件事是,boost库在接受过程中必须经过同行评审。当然,在那之后,我相信对什么样的变化真的很少有监督,但至少在它们被接受之前有一些审查。洛基只是一个人的幻想。当然Alexandrescu是相当不错的,但仍然...这是他的所有想法,并没有进一步的审查比这一点。
5t7ly7z53#
我在我的整个C++环境中使用Boost,就像标准库的扩展一样(使用VC9和VC10)。
我并不是在所有项目上都使用它。
我在个人项目(主要是游戏)中使用它,在那里我可以完全控制依赖项。
我在一个大的游戏项目中使用了boost::function(还有其他几个boost库)。
洛基也很好,但我觉得没有必要。我想我唯一想使用的库是Singleton,但我使用的是一个定制的,目前已经足够好了。
omjgkv6w4#
C++0x是我使用的快速函数对象。