1

我有一个使用模板并且可以存储多种抽象数据类型 (ADT) 的“存储库”(仓库,您可以随意称呼它)。

Rep.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 或 Activity 作为模板的存储库类型的对象......参数?)

像这样: ?(以下)

个人控制器.h

Repository<Person> *repository;

活动控制器.h

Repository<Activities> *repository;
4

1 回答 1

1

您不能链接到模板,因为链接器不能创建特化——编译器需要这样做。您需要将模板(来自 Rep.cpp)放在 Rep.h 文件中,以便编译器可以创建您需要的特化。

于 2012-05-15T15:37:06.757 回答