Alexandrescu 有非常有趣的想法(类型列表、基于策略的类模板等),但其中很多都在 boost 中得到了改进,并在更广泛的编译器中进行了可移植性和正确性的测试。
仅出于这些原因,我建议尽可能选择 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 所需的部分 Loki,但在适当的时候大多会增强。