2011-08-16 12 views
2

私は、特定のカテゴリに属する​​ダウンロード項目の中でサーバを形成するアプリケーションの開発に取り組んでいます。私は、ダウンローダは、このように見えるようにしたい:ItemCategoryBase由来適切な方法で項目を分類する

class Downloader 
{ 
    Downloader(const ItemCategoryBase &category); 
    ... 
} 

各クラスが提供されます、それは、カテゴリIDは、(各派生クラスがどうなるだけのことだ実際には)仮想関数の谷のです。

私が抱えている問題は、合計120アイテムのカテゴリがあり、それぞれの派生クラスを作成することは苦しいことです。

IDを保持するためにプリミティブを使用すると考えましたが、主にカテゴリIDが同じ間隔の一部ではないため、IDが範囲外の場合に範囲チェックと例外をスローしたくありません。

私が探しているのは、上記のスキームに適合するコードを効率的に作成する方法です。

ご協力いただきまして誠にありがとうございます。

答えて

1

実際にこれが正しい方法であると判断した場合は、すべてのカテゴリIDを含むCSVドキュメントを作成し、それぞれを挿入するアプリケーションを作成してくださいIDをテンプレートのヘッダー/ソースファイルに追加して保存します(たとえば、カテゴリIDがファイルのどこに入っていても「$ CATEGORY_ID」を入れてから、各IDを順番に「$ CATEGORY_ID」に置き換えます)。 )

私はあなたの声明を理解しているかどうかはわかりません。「IDを保持するためにプリミティブを使用することを検討しましたが、IDが範囲外の場合に範囲チェックを実装して例外をスローしたくありません主にカテゴリIDがすべて同じ区間の一部ではないためです。とにかくアプリケーションのどこかで複雑さを処理する必要がなく、範囲チェックが難しくないケースは想像もできません:すべての有効なCategory IDをあなたのIDタイプのリスト構造に入れてくださいそのIDがそのリストの一部であるかどうかを簡単なインデックス参照呼び出しで答えることができます。

私が誤解している場合は、120個のItemCategoryBase派生クラスを1つのItemCategoryBaseベースクラスよりも簡単に扱うように設定することは、IDのリストに対して検証されますか? 「主にカテゴリIDがすべて同じ区間に含まれているわけではないから」と言っているので、おそらくリストに対するチェックは必要なものを提供するでしょう。さもなければ、あなたはそれがどのように機能するかについて少し詳しく説明できますか?私はいつも例外があると認識していますが、異なるIDを提供する以外に何もしない120のクラスは、実際にあなたを長期的にうまくやってくれる解決策ではないと私を襲います。

1

C++を使用しているので、テンプレートを使用せず、IDを含む非タイプのテンプレートパラメータを指定することをおすすめします。

template<int category_id> 
class Downloader : public ItemCategoryBase 
{ 
    public: 
    virtual int get_id() 
    { 
     return category_id; 
    } 
}; 

あなたにも、コンパイラがあなたのために仕事をさせて頂く場合がございます。カテゴリは整数とすると例えば

、。

関連する問題