Próbuję napisać klasę szablonu, która może tworzyć klasy w zależności od przepustki <class>
I. Problem polega na tym, że nie mogę zadeklarować i zdefiniować w tym samym pliku .h
. W moim projekcie narzędzie UTF może działać tylko z plikami .cpp
(dla pokrycia kodu itp.). Widziałem na blogu, że mówią "Dodaj .cpp
zamiast .h
". Czy to jest wskazane?Oddzielne pliki .h i .cpp w implementacji klasy szablonów
Template.h
#ifndef TEMPLATE_H_
#define TEMPLATE_H_
template<class T>
class Template
{
public:
T Add(T a,T b);
};
#endif /* TEMPLATE_H_ */
Template.cpp
#include "Template.h"
template<class T>
T Template<T>::Add(T a, T b)
{
return a+b;
}
Main.cpp
#include "Template.cpp" //Is this a good practise?
#include <iostream>
int main(int argc, char **argv) {
Template<int> obj;
std::cout<<obj.Add(3,4)<<std::endl;
}
Jeśli nie jest to wskazane, to w jaki sposób mogę rozwiązać ten problem? export
?
To nie jest ściśle zgodne z prawdą. Chociaż najwygodniej jest umieszczać definicje w każdej jednostce tłumaczeniowej, a co za tym idzie - zwykłą praktykę, nie jest to wymogiem. –
@MarkRansom Yup, masz rację. Jednak rzadko zdarza się, aby wszystkie wymagane instancje jawne były wykonywane z wyprzedzeniem. – Angew