12

私はAlexandrescuの本、Modern C ++ designを読んでいて、彼が使用しているテクニックに非常に感銘を受けたので、Lokiライブラリをアプリケーションに追加したいと思いました。

ただし、さらに調査したところ、すでに使用しているブーストが多くの同様の機能を提供していることがわかりました(ただし、すべてではありませんが、たとえば、ブーストでシングルトンを見つけることができませんでした)。

ポリシーベースのデザインとファンクターのため、私は主にロキの使用に興味を持っていました。

私にとって、ブーストとロキには長所と短所があります。私がlokiに関して抱えている主な懸念は、ドキュメントが貧弱なことです(ライブラリはもう本に縛られていません)が、一部の領域では、lokiはブーストよりも強力で柔軟性があるようです(私はそれについて間違っているかもしれません)

ファンクターやポリシーにブーストやロキを使用する前に、実際にそれらを使用している人々の意見を知りたいと思います。

紙の上では見た目がとても良い場合もありますが、実際に使用するといくつかの欠点があります:)

4

4 に答える 4

12

Alexandrescuは非常に興味深いアイデア(タイプリスト、ポリシーベースのクラステンプレートなど)を持っていましたが、それらの多くは、移植性と正確性について幅広いコンパイラーでテストされるとともに、ブーストで改善されました。

これらの理由だけで、可能な限りブーストを優先することをお勧めします。とは言うものの、現代のC ++デザインは、C ++の柔軟性について多くの洞察を提供し、多くの一般的なプログラミングの問題に取り組むために1人の人の心(非常に良いもの)を調べます。

たとえば、ポリシーベースのスマートポインターは非常に優れたアイデアですが、ブーストの作成者がshared_ptrとscoped_ptrをこのように実装しないことを選択した理由を見つけることができます。

A.パラメータ化はユーザーを思いとどまらせます。shared_ptrテンプレートは、大規模なパラメーター化なしで一般的なニーズを満たすように慎重に作成されています。いつの日か、非常に使いやすく、誤用しにくい、高度に構成可能なスマートポインタが発明されるかもしれません。それまでは、shared_ptrは、さまざまなアプリケーションに最適なスマートポインターです。(ポリシーベースのスマートポインターに関心のある方は、AndreiAlexandrescuによるModernC ++ Designをお読みください。)

多種多様なスマートポインターが必要であり、あなたとあなたのチームがテンプレートのパラメーター化を幅広く使用することに慣れている場合は、スマートポインターを実装するためのポリシーベースのアプローチが役立つ可能性があります。ただし、scoped_ptrとshared_ptr(およびweak_ptr)は、非常に完全に機能する傾向があります。ポリシークラスの組み合わせ動作は、さまざまな有用な組み合わせがあるものにおそらく適しています。

それにもかかわらず、ブーストが対処していないアレクサンドレスクからのいくつかの興味深い提案がまだあります。たとえば、MOJOは、コンパイラーがmoveコンストラクターの実装を改善するまで、またはC ++ 0xからの右辺値参照を使用できるようになるまで、真に有用です。彼はまた、メモリアロケータの実装について非常に興味深い考えを持っています。

質問に関しては、私たちは商業プロジェクトでモジョに必要なロキの部分を使用しますが、それが適切な場合はほとんどブーストします。

于 2010-06-27T00:46:30.550 に答える
5

おそらく考慮すべきことの1つは、Boostライブラリは受け入れ中にピアレビュープロセスを経る必要があるということです。その後はもちろん、どのような変更が行われるかについてはほとんど見落としがないと思いますが、少なくとも、承認される前にいくつかのレビューがあります。ロキはただ一人の男のビジョンです。もちろん、Alexandrescuは非常に優れていますが、それでも...それはすべて彼のアイデアであり、それ以上のレビューはありません。

于 2010-06-27T00:07:27.123 に答える
4

標準ライブラリ(VC9およびVC10)の拡張機能のように、C++環境全体でBoostを使用しています。

すべてのプロジェクトで使用しているわけではありません。

依存関係を完全に制御できる個人的なプロジェクト(主にゲーム)で使用します。

私は大きなゲームプロジェクトでboost::functionを使用しています(boostの他のいくつかのライブラリを使用)。

ロキもいいですが、私はその必要性を感じませんでした。私が使用しようと考えているライブラリの部分はシングルトンだけだと思いますが、今のところ十分に優れたカスタムライブラリを使用しています。

于 2010-06-26T22:47:20.410 に答える
2

C ++ 0xは、クイック関数オブジェクトに使用しているものです。

于 2010-06-26T22:26:00.080 に答える