2

すなわち。次のように使用できるクラス ADT をコーディングしたいと思います。

myADT <type> objectA;

誰かが次のようなベクトルを使用するのと同じ方法で:

vector <type> aVector;

テンプレートと <> 演算子のオーバーロードに関係があるのではないかと推測していますが、引数としてデータ型を取得するにはどうすればよいですか?

4

5 に答える 5

4

ハードコードされた typedef を使用して ADT を実装するクラスがあるとしますT

class ADT
{
  public:
    typedef int T;

    ADT();
    T& operator[](size_t index);
    const T& operator[](size_t index) const;
    size_t size() const;
    ...
  private:
    T* p_;
    size_t size_;
};

(実際の ADT に適した内部ストレージとメンバー関数を作成する必要があります)。

これを変更してTas done forstd::vectorなどを指定できるようにするには:

template <typename T>    <-- specification of T moved to here
class ADT
{
  public:
                         <-- typedef for T removed from here
    ADT();
    T& operator[](size_t index);
    const T& operator[](size_t index) const;
    size_t size() const;
    ...
  private:
    T* p_;
    size_t size_;
};

使用法は次のとおりです。

ADT<int> an_adt_int;
ADT<double> an_adt_double;
于 2011-03-01T01:31:02.150 に答える
1

ADT が抽象データ型の場合は、テンプレートを使用する必要があります

template<class T>
struct myADT
{
    // implementation, for example, two variables of type T.
    T A;
    T B;
};

使用する

myADT<int> objectA;

objectA.A = 3;
objectB.B = 4;

myADT<char> C;

C.A = 'A';

C++ テンプレートに関する本や記事を読むことをお勧めします。Google「C++ テンプレート」。

于 2011-03-01T01:29:36.487 に答える
1

私はそれがあなたが探しているものであることを願っています

template <typename NodeType> class List;
template <typename NodeType>
class Node_List
{
    ...
    private:
      NodeType date;
      Node_List< NodeType > *next_Ptr;    
}

class List
{
   ...
   private:
     Node_List< NodeType > *first_Ptr;
     Node_List< NodeType > *last_Ptr;
 }

使用:

リスト < int > int_list; リスト < char > char_list;

于 2011-03-01T01:32:45.333 に答える
1

テンプレートは、型ごとにコードを実際に繰り返すことなく、型の機能を適応させるのに役立ちます。これは汎用プログラミングです。

template < class T >
class foo
{
    T number ;
    public:
    foo( T a )
    {
        number = a; // This can be achieved through initializer lists too.
    }
};

上記のスニペットのキーワードtemplateは、以下がテンプレートであることを示しています。また、型はclass、つまり で囲まれてい<>ます。したがって、fooはテンプレート パラメータが であるクラス テンプレートですT

foo<int> obj(10);

テンプレート パラメータの型はintです。したがって、対応するコードは、テンプレートのインタンシエーションでコンパイラによって生成されます。つまり、

class foo
{
    int number ;
    public:
    foo( int a )
    {
        number = a; // This can be achieved through initializer lists too.
    }
};

以外の別のテンプレート パラメーターintが指定されている場合、対応するコードがテンプレートのインスタンス化時にコンパイラによって生成されます。詳細については、MSDN テンプレート チュートリアルを参照してください。それが役に立てば幸い。

于 2011-03-01T01:39:55.783 に答える
1

@Matt Munson、トニーへの質問への回答があります... cplusplusから:

型パラメーターを使用して関数テンプレートを宣言するための形式は次のとおりです。

template <class identifier> function_declaration;
template <typename identifier> function_declaration;

両方のプロトタイプの唯一の違いは、キーワード class またはキーワード typename の使用です。どちらの式もまったく同じ意味を持ち、まったく同じように動作するため、その使用法は明確ではありません。

于 2011-03-01T02:25:04.783 に答える