std::function
を高速デリゲートに使用する方法と、追加または削除できるイベントの動作を示すコレクションにstd::function
を格納する方法について、この前にいくつか質問を投稿しました。私はまた、少しのEventArg
タイプのクラスの全体を書くときにベストプラクティスを尋ねました、そして、その小さなデザイン決定もまた休まれました。これは素晴らしいコミュニティです!たくさんの機能とたくさんのLambda?
ここでは、プリアンブルとは別に、自分の構造を整えておく必要があります。入力データを処理するすべてのハンドラを記述する必要があります。
typedef std::function<void(const CommandData&)> CommandDelegate;
typedef boost::shared_ptr<CommandDelegate> CommandDelegatePtr;
typedef std::map<short, CommandDelegatePtr> CommandMap;
そして、私はこれまで、約200ハンドラを追加したい:私はこのようになりますこと、std::map
を持っています。私は、標準のメンバー関数とlambdaの間で選択肢を持っています。
私が考えた最初のことは、メンバー関数について考えたとき、200の宣言と200の実装と1つの大きな助けのソースファイルでした。
これらのハンドラですべてのクラスを汚染するのではなく、「ちょうどハンドルです。なぜラムダを使用しないのですか?クラスが構築されると、これらのすべての無名関数をマップに割り当てることができます。仕事やった!
は、それから私は、コンストラクタが巨大になり実現しました。私が考えられるため、サイズに独自のファイルに行くことができる「initializeMap`ヘルパー関数を呼び出すことができます。
皆さんはどう思いますか?
- の200件の宣言ファイル、(他の機能の中で)200の実装.cppファイルに
.h
ファイルの - 200宣言、別個「handlers.cpp`実装ファイル
- いいえ宣言、CTOR
- に割り当てられた200のラムダなし宣言、それ自身のファイルの
initializeMap
関数で割り当てられた200のラムダ。
ありがとうございます!
私はラムダに向かって傾いています。私は、私のメインクラスが小さなハンドラーを抱えていないという考えが大好きです。だから私は疑問は、それらを割り当てることだと思う - したがって、クラスのコンストラクタ/初期化関数についての質問。 –
3または4、私の個人的な好みは、現代のコンパイラが同時にコンパイルすることができるので、より少ないソースファイルではありますが、実際には関係ありません。 – Puppy
私はかなり同意しますが、確かめたいと思っていました。お返事をありがとうございます。 –