2012-05-15 46 views
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」

我該如何撥打電話?(創建一個具有Person或Activity作爲模板參數的類型庫對象?)

喜歡這個:? (如下圖)

PersonController.h

Repository<Person> *repository; 

ActivityController.h

Repository<Activities> *repository; 
+0

您似乎在尋找普通的模板專業化,或者這些對於您的任務來說還不夠? - 順便說一句,你爲什麼做你自己的動態數組而不是使用'std :: vector',爲什麼你存儲指針而不是數組中的值?兩者看起來都是非常小的。 – leftaroundabout

+0

@leftaroundabout這是我的作業,我必須做出自己的動態數組(我發現很有趣)。 dynamicArray更像是一個列表(像Python中的列表),我沒有存儲值,因爲我有抽象數據(類)我想存儲類元素,而不是實際的值。 – Kalec

回答

1

你不能鏈接到一個模板,因爲鏈接不能創建專業化 - - 編譯器需要這樣做。您需要將您的模板(來自Rep.cpp)放入您的Rep.h文件中,以便編譯器可以創建所需的專業化版本。

+0

好的,感謝那 – Kalec

+0

但是我必須在.cpp中重複它嗎?有問題 – Kalec

+0

不,一旦包含帶#include的頭文件,就好像它被輸入到.cpp文件中一樣。 –