C++:您使用 Loki 还是 Boost 作为函子吗?

问题描述 投票:0回答:4

我一直在阅读 Alexandrescu 的书《现代 C++ 设计》,他使用的技术给我留下了深刻的印象,所以我想将 Loki 库 添加到我的应用程序中。

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

我对使用 Loki 最感兴趣,因为它基于策略的设计和函子。

对我来说,boost 和 loki 各有利弊。我对 loki 的主要担忧是糟糕的文档(图书馆不再与书绑定),但在我看来,loki 在某些领域比 boost 更强大、更灵活(我在这一点上可能是错的)

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

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

c++ boost metaprogramming functor c++-loki
4个回答
12
投票

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

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

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

A.参数化会让用户望而却步。 Shared_ptr模板是精心设计的 专为满足常见需求而设计,无需 广泛的参数化。有一天,一个 高度可配置的智能指针可以 被发明也很容易 使用并且很难误用。直到 那么shared_ptr就是智能指针 广泛的选择 应用程序。 (有兴趣的人 基于策略的智能指针应该 阅读 Andrei 的《现代 C++ 设计》 亚历山德雷斯库。)

如果您确实需要各种智能指针,并且您和您的团队能够轻松地广泛使用模板参数化,那么基于策略的方法来实现智能指针可能适合您。然而,scoped_ptr和shared_ptr(以及weak_ptr)往往能相当彻底地完成这项工作。策略类的组合行为可能更适合有多种有用组合的情况。

尽管如此,Alexandrescu 仍有一些有趣的提案尚未得到解决。例如,在编译器更好地实现移动构造函数或者我们可以使用 C++0x 中的右值引用之前,MOJO 仍然非常有用。他对于实现内存分配器也有一些非常有趣的想法。

对于这个问题,我们在商业项目中使用了 Mojo 所需的 Loki 部分,但主要是在适当的时候使用了 boost。


5
投票

可能需要考虑的一件事是,Boost 库在接受过程中必须经过同行评审过程。当然,在那之后,我相信对所做的更改确实很少有监督,但至少在它们被接受之前进行了一些审查。洛基只是一个人的幻象。当然,Alexandrescu 相当不错,但仍然......这都是他的想法,没有比这更进一步的评论了。


4
投票

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

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

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

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

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


2
投票

C++0x 是我用于快速函数对象的。

© www.soinside.com 2019 - 2024. All rights reserved.