2

デザインについて質問があります。

同じオブジェクトに属していないが、同じ複雑なタイプに作用する一連のジェネリック関数があります。

2つの理由から、これらをテンプレートクラスに静的メンバー関数としてグループ化することを考えています。

a)コードを読みやすくするためにtypedefを「名前空間クラス」に入れることができます。b)ユーザーは静的クラスを一度だけtypedefして、関数の特殊化を忘れることができます。

したがって、呼び出す代わりに:

myfunction< char,int,std::set<double> >(...);

彼はできる:

typedef TheClass< char, int, std::set<double> > MyTheClass;

そして書く :

MyTheClass::myfunction(...);

この悪いデザインとその理由を考えてみませんか?

前もって感謝します !

4

2 に答える 2

2

クラス内のテンプレート関数は、使用されている場合にのみインスタンス化されます。したがって、すべての関数をテンプレートクラスでラップしている場合でも、特定の型パラメーターセットで使用される関数のみが、その型パラメーターセットでテンプレートに対してインスタンス化されるため、非効率的ではありません。

読みやすさのメモでは、まれな状況を除いて、私は個人的にtypedefを軽蔑しています。なぜなら、型が何であるかを理解するためにそれらを追跡する必要があり、さまざまな型パラメーターを使用するテンプレート化されたクラスにそれらがたくさんある場合、とにかくイライラして読みにくい。

たぶん、同じような目的を持つ関数を、使用したいときにusing句で導入できる独自の実際の名前空間でラップし、ユーザーがそれらの関数に対して個別に導入できるオプションのtypedef用に別の名前空間を作成します:)

于 2012-05-26T13:34:04.470 に答える
2

DRYの原則を適用できるところならどこでも、通常は良い考えだと思います。したがって、同じテンプレートパラメータを繰り返し渡すことを回避でき、よりクリーンな代替手段が見つからない場合は、それを選択してください。

于 2012-05-26T13:45:50.470 に答える