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

时间:2010-06-26 22:22:56

标签: c++ boost metaprogramming functor loki

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

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

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

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

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

有时事情看起来非常好,但是当你真实地使用它们时会有一些缺点:)

4 个答案:

答案 0 :(得分:12)

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

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

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

  

一个。参数化不鼓励用户。   shared_ptr模板是仔细的   精心设计,以满足共同的需求   广泛的参数化。有一天一个   高度可配置的智能指针可能   被发明也很容易   使用,很难滥用。直到   然后,shared_ptr是智能指针   多种选择   应用。 (对那些感兴趣的人   基于策略的智能指针应该   阅读Andrei的现代C ++设计   Alexandrescu的。)

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

尽管如此,仍然有一些有趣的提议来自亚历山大雷斯库,提案尚未解决。例如,MOJO在编译器更好地实现移动构造函数或者直到我们可以使用来自C ++ 0x的rvalue引用之前仍然真正有用。他对实现内存分配器也有一些非常有趣的想法。

至于这个问题,我们在商业项目中使用了mojo所需的部分,但在合适的情况下大多会提升。

答案 1 :(得分:5)

可以考虑的一件事是,在接受期间,增强型库必须经过同行评审过程。在那之后,我当然相信对变化的影响确实很少,但至少在接受之前会有一些评论。 Loki只是一个人的愿景。当然Alexandrescu相当不错,但仍然......这是他的所有想法,并没有比这更进一步的评论。

答案 2 :(得分:4)

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

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

我在个人项目(主要是游戏)中使用它,在那里我完全控制了什么是依赖项。

我在一个大型游戏项目中使用了boost :: function(还有来自boost的其他几个库)。

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

答案 3 :(得分:2)

C ++ 0x是我用于快速功能对象的。