1

テンプレートを使用し、いくつかの抽象データ型(ADT)を格納できる「リポジトリ」(ウェアハウス、好きなように呼んでください)があります。

担当者h

template <typename TAD>
class Repository {
    public:
        DynamicArray <TAD *> tad;  // made a dynamic array myself, also uses templates

        // since one ADT has one of the following two functions and the other doesn't
        // I decided to not use TAD here

        Person *findByName (string name);
        Activities* findByDate(string date);

        void save (TAD &p);
        //etc
}

Rep.cpp

template <>
void Repository<Person>::save(Person &p) throw (RepositoryException) { 
    @code
}
template <>
void Repository<Activities>::save(Activities& a) throw (RepositoryException) {
    @code
}
//etc

これで、ADTを個別に処理するコントローラーができたので、抽象データ型「Person」のみを反映するリポジトリを作成したいと思います。

どうすればいいですか?(テンプレートとしてPersonまたはActivityのいずれかを持つリポジトリタイプのオブジェクトを作成します...引数?)

このような: ?(下)

PersonController.h

Repository<Person> *repository;

ActivityController.h

Repository<Activities> *repository;
4

1 に答える 1

1

リンカーは特殊化を作成できないため、テンプレートにリンクすることはできません。コンパイラがそれを行う必要があります。コンパイラが必要な特殊化を作成できるように、テンプレート (Rep.cpp から) を Rep.h ファイルに配置する必要があります。

于 2012-05-15T15:37:06.757 に答える