2011-06-29 12 views
6

私は、一日、一週間または一ヶ月に一意のIDを生成するためのさまざまな戦略を持つ一意のIDジェネレータを作成しています。 仮想関数機構を持つクラスの階層を作成したくありません列挙型に基づいてテンプレートを作成することをお勧めしますか?

次のコードスニペットのようなことをやっていますか? 提案がありますか?

enum Duration { Day, Week, Month }; 

template <Duration d> 
class IDGenerator 
{ 
    generateId(); 
} 
+1

これは完全にうまく動作します。この場合、それぞれの 'if'節は完全に最適化されます。あるタイプのクラステンプレートを専門にするほど強力ではないことに注意してください(多くの/ほとんどの人がここでは「より少ないパワー」を好むでしょうが)。 – Damon

+0

「良いアイデア」を定義します。 –

答えて

5

はい、それは許容され、コンパイル時の多型はあなたのために十分である場合だけを提出動作します - あなたは、仮想電話料金を節約し、それがより良いコンパイラcoptimizationsを可能にしますが。

-1

上記のように、不必要に混乱します。異なる名前の3つのクラスを作成するだけです。

+0

そして、 'Hour'、' Year'などのように列挙型を拡張するたびにクラスを追加しますか? – aioobe

+0

@Space:それが混乱している場合は、typedef IDGenerator DayIDGeneratorなどのようにtypedefを作成するだけです。異なる名前の3つのクラスを作成する必要はありません! – Nawaz

+0

@aioobe:テンプレートは、わかりやすいデフォルト実装があれば役に立ちます。これは 'generateId()'の実装方法に大きく依存します。彼は 'Duration'をその関数のパラメータにすることができます。 –

関連する問題