C++:你是否正在使用Loki或Boost进行仿函数?

Din*_*aiz 12 c++ boost metaprogramming functor loki

我一直在阅读Alexandrescu的书,现代C++设计,我对他使用的技术印象深刻,所以我想在我的应用程序中添加Loki库.

然而,经过进一步的调查,我看到我已经在使用的提升提供了很多类似的功能(不是全部,但是,例如,我无法在boost中找到单例)

由于基于策略的设计和仿函数,我最感兴趣的是使用loki.

对我而言,boost和loki都有利有弊.我对loki的主要关注是糟糕的文档(图书馆不再与书籍联系在一起了)但在我看来,loki比某些领域的提升更强大,更灵活(我可能错了)

在选择使用boost或loki作为仿函数和策略之前,我想知道在现实生活中使用它们的人的意见.

有时在纸上看起来非常好但是当你真正使用它们时会有一些缺点:)

sti*_*472 12

Alexandrescu有非常有趣的想法(类型列表,基于策略的类模板等),但是很多都在boost中进行了改进,并且在更广泛的编译器中进行了测试,以实现可移植性和正确性.

我建议只是出于这些原因,尽可能选择增强.也就是说,现代C++设计仍然提供了很多关于C++灵活性的见解,并且可以深入了解一个人的思想(非常好的)来解决许多常见的编程问题.

例如,基于策略的智能指针是一个非常巧妙的想法,但我们可以找到为什么boost作者选择不以这种方式实现shared_ptr和scoped_ptr:

A.参数化不鼓励用户.shared_ptr模板经过精心设计,无需大量参数化即可满足常见需求.有一天,可能会发明一种高度可配置的智能指针,它也非常容易使用并且很难被滥用.在此之前,shared_ptr是各种应用程序的首选智能指针.(那些对基于策略的智能指针感兴趣的人应该阅读Andrei Alexandrescu的Modern C++ Design.)

如果您确实需要各种各样的智能指针,并且您和您的团队很乐意在模板参数化方面进行广泛的工作,那么实现智能指针的基于策略的方法可能对您有用.但是,scoped_ptr和shared_ptr(以及weak_ptr)倾向于完全完成这项工作.策略类的组合行为可能更适用于存在各种有用组合的事物.

尽管如此,Alexandrescu仍然提出一些有趣的建议,即提升尚未解决.例如,在编译器更好地实现移动构造函数或者直到我们可以使用来自C++ 0x的右值引用之前,MOJO仍然真正有用.他还对实现内存分配器有一些非常有趣的想法.

至于这个问题,我们在我们的商业项目中使用了mojo所需的部分,但是在适当的时候大多提升.


Kla*_*aim 5

我在整个 C++ 环境中使用 Boost,就像标准库的扩展(使用 VC9 和 VC10)。

我并不在所有项目中都使用它。

我在个人项目(主要是游戏)中使用它,我可以完全控制依赖项。

我在一个大型游戏项目中使用 boost::function (以及 boost 中的其他几个库)。

Loki也不错,但我觉得没必要。我认为我正在考虑使用的库的唯一部分是 Singleton,但我使用的是目前足够好的自定义部分。


Edw*_*nge 5

可以考虑的一件事是,升级库必须在验收期间通过同行评审过程.在那之后,我当然相信对变化的影响确实很少,但至少在接受之前会有一些评论.Loki只是一个人的愿景.当然亚历山大里斯库是相当不错的,但仍然......这都是他的想法,而且没有进一步的评论.