2009-03-17 11 views
18

私は、おそらく、私たちのデザインスキルを向上させ、最終的にはより良いプログラミング実践を持つために、このグループの会社のためにこの本を購入しました。私が読んだところでは、主に、テンプレートで使用できる便利なトリックがあり、それをコードに組み込むことが有益であるかどうかはわかりませんが、コードの複雑さ/可読性と維持不能性がもたらされます。現代のC++デザイン汎用プログラミングとデザインパターン応用

私は、あなたがその本から何を使うのですか、フォローの専門家から知りたいですか?プロフェッショナルなソフトウェア開発に関連して重要なことは、何を避けるべきですか?

一般的には、この本について考え、それは(それ、私が愛するジョンLakosの本と同じに)大規模システムのソフトウェア開発にどのように適合しますか?

アレクサンドルズ効果とは何ですか?

+0

+1この本を読むと、私はほとんど同じことを念頭に置いていました。 –

答えて

22

を使用しています、私は情報に関する最も有用見つける操作は、一般的なC++プログラミングについて話しました、無効なコードのシナリオのための時間のコンパイルエラーを作成するためのテンプレートを使用する能力です。一度それを取得すると、実行時のバグとなるクラスをコンパイル時エラーにすることが非常に効率的になります。

私は仕事でこれを成功させました。確かにそれは完全に読めないメッセージを生成し、私の同僚は時折落ちて、「世界で何がそれですか?」と言います。しかし、バグのたびにコンパイルすることができませんでした。私はまた、それが適度に理解できるという希望で、特定の誤りを大いにコメントします。

+0

おそらくテンプレートマジックが好きな理由の一つだと思います。ランタイムからコンパイル時にエラーを移動させることは、誰にとっても多くの時間と労力を節約します。 +1 – jalf

+1

+1。時間の経過とともにエラーの検出を導入に移すたびに、あなたは勝ちます。 –

+1

インターネットでこの練習に関する良い資料がありますか?私は本当にどんなリンク/材料にも感謝しています。 – shuttle87

1

IMHO、読書(と理解!)本の最初の章では、(私はそれが自由のためにオンラインでも入手可能です信じて)便利です。この本の残りの部分は、Loki図書館の内部をかなり説明しており、実際にはそれを推奨していません。 2005アラウンド

+0

それは私もそれについて考える方法です –

15

私はC++に組み込まれた内部ドメイン固有言語のように、使用することは非常に表情豊かだったのライブラリを作成するための式テンプレートとさまざまなコンパイル時のトリックに重くなりました。特に、.NET上でLinqとして出てきたものに似た、かなり完全な組み込みSQLのものです。

ユーザーにとっては問題ありません。しかし、それを維持しようとしている私以外の誰かのために、それは非常に急な学習曲線を提示した。それが問題です。 「賢い」テクニックのように、それを維持できる人のプールを減らします。

これは一般的なユーザーがの勇気を理解する必要はありません広く使用されているクラスライブラリ、罰金です。しかし、特定のチームが所有する「社内」の図書館では、おそらくすべての人にパッチを適用したり分かりやすくする必要があります。私の経験では、C++テンプレートのより秘密の可能性がこれを排除しているように見えます。

これはかなり楽しいことでした。標準テンプレートの外

+0

+1優れたアドバイス。 – peterchen

6

あなたの会社/プロジェクトがブーストを許可している場合。この本はあなただけの満足感のためにいくつかのブーストマジックを発見するのに役立ちます。

会社/プロジェクトがブーストを許可していない場合。この本はブースト::機能のように最も必要とするいくつかのブースト・パーツを再作成するための良いガイドになります。

私はすべてのプロジェクトに何らかの種類のユーティリティモジュールがあると思います。そのような本は、あなたの「ユーティリティ」をより一般的で安全なものにするのに役立ちます。これは、本の一部のパターンとSFINAEのトリックを借りることによって得られます。

この本のほとんどは、実行時の多形性を静的に変更するGOFデザインパターンのいくつかを再考する方法を示しています。私はこの本から直接使うのですかどう

3
  • ?何もない - 私はLokiまたはBoostを使用しません。
  • 私のコードに影響しましたか?実際には - 私は本を読む前にポリシーのコンセプトに精通していた
  • 読む価値はありますか?絶対に!私に
2

それは心拡大の経験をより多くのでした。私は本を​​読んで、後で使用した詳細やテクニックを学び続けました。しかし、最も重要な部分は、資本Dを使ったデザインが、本書全体で(D言語で意図されていない)論じられていることです。

スマートポインタの章では、私より保守的に考え方「すべての可能な機能を提供」を切り替える:あなたが提供するものを検討し、それは価値がありますか?どのようにコードを壊すことができますか?それはユーザーを助けるでしょうか?微妙な落とし穴を作り、コードを脆弱にしますか?

あなたのクラスは/より良い小さな直交単位に分割されなければならないことができるかどうかを設計する際の設計はあなたの事をしなければならない基づいた政策の一環。ほとんどの場合、私はすべてのポリシークラスに分かれて終了するわけではありませんが、コードは通常、異なる直交する部分が絡み合うことが少ないので、よりクリーンになります。

ああ、Earwickerのように、私の最初の反応は、本当に開発のスピードを上げた素敵なものを実装していましたが、もう一度、私が働く小さな会社では、私はそれを維持することができ、 。それ以上はしないでください。開発に要した時間よりも、デバッグやメンテナンスに2倍の時間を要します。

0

私はLokiを使用していませんが、前回の作業で積極的に使用しました。 Boostはこの素晴らしい本から多くのアイデアを実装しました。この本から

物事がビジネスロジックで使用するために意図されていない、彼らは、ビジネスロジックで使用されるライブラリ(ブースト、ロキ、あなた自身の何か)やライブラリで実装されなければなりません。これは、 "このトリックをコードで使用する"または "このトリックを使用して、コードの大部分で美しいライブラリを使用して区切られたライブラリを実装することです(例えばboost:bind - 醜い実装ですが、この実装)」

はまた、この本は、強力なC++メタプログラミングと脳のために良いトレーニングを示しています。

0

現代のC++デザインのものを使用していると言いましたが、私は人々からいくつかの失礼な反応を経験しました。まず、WTFのコメント。これに続いて「あまりにもスマートにしようとはしない」というコメントが続きました。次に、アイデアのより良い理解。そして最後に、アイデアを共通の語彙の一部であるポイントまで受け入れます。

本書の複数のコピーを保管してください。理想的には、すべての開発者のためにコピーを購入する。また、このようなものが開発者の間で共通の語彙になるまで、パターン/イディオムと関連ページをコメントに引用してください。

関連する問題