3

Nodeいくつかのデータを配列に格納するためのテンプレートを以下に示します。追加する前に、同じ値を持つエントリが存在するかどうかを確認したいと思います (挿入ロジックが必要です)。文字列型の場合、特定の比較方法を実装したい。

template <class T> class Node
{
private:
    short noOfEntries;
    T data[MAX_VALUES];
public:
    Node () { noOfEntries = 0; }
    int Compare(int index, T *key);
    int Insert(T *key);
};

template <class T>
int Node<T>::Compare(int index, T *key)
{
    if(data[index] > *key)
        return 1;
    else if(data[index] == *key)
        return 0;
    return -1;
}

template <>
class Node <string> {
  public:
    int Compare(int index, string *key)
    {
        return (data[index].compare(*key));
    }
};

属性 'data' および 'noOfEntries' が class にないため、これによりエラーが発生しますNode <string>。ノードのすべての属性を文字列の特殊バージョンに配置する必要があるようです。メソッドについても同じです。

T の実際の型に応じて正しい compare() メソッドを呼び出す Node に対して定義された挿入メソッドを 1 つだけ持つようにするためのより良い方法はありますか? メソッドの重複を避けたい。

4

1 に答える 1

4

1 つのメンバーを特殊化するだけです。

template <> int Node<std::string>::Compare(int index, std::string *key)
    {
        return (data[index].compare(*key));
    }

これを行うためのより慣用的な方法は、比較ポリシー テンプレート引数、または要素タイプのデフォルトの比較ポリシーを記述する特性を使用することです。

于 2012-11-16T22:07:53.650 に答える