Difference between revisions of "CPP/Templates/ClassTemplateExplicitInstantiation"
From ProgrammingExamples
< CPP
(→Point.h) |
(→Point.cpp) |
||
| Line 58: | Line 58: | ||
using namespace std; | using namespace std; | ||
| − | + | #ifndef NO_EXPLICIT_INSTANTIATION | |
| − | // | + | |
| + | //can put the definition here, however... (see below) | ||
template <typename T> | template <typename T> | ||
double Point<T>::Add() | double Point<T>::Add() | ||
{ | { | ||
return 2.0 + 4.3; | return 2.0 + 4.3; | ||
| − | } | + | }; |
| − | + | ||
| + | //... you will be required to instantiate all classes you might use from this template. | ||
| + | template class Point<double>; | ||
| + | template class Point<float>; | ||
| + | //... etc. | ||
| + | |||
| + | |||
| + | #endif | ||
| + | |||
</source> | </source> | ||
Revision as of 23:12, 30 November 2010
ClassTemplate.cpp
#include <iostream> #include <vector> #include "Point.h" using namespace std; int main(int argc, char* argv[]) { Point<double> A; cout << A.Add( ) << endl; return 0; }
Point.h
#ifndef POINT_H #define POINT_H #include <vector> using namespace std; template <typename T> class Point { T x,y,z; public: double Add(); }; #ifdef NO_EXPLICIT_INSTANTIATION //must put the definition here to avoid explicit instantiation template <typename T> double Point<T>::Add() { return 2.0 + 4.3; } #endif #endif
Point.cpp
#include "Point.h" #include <vector> using namespace std; #ifndef NO_EXPLICIT_INSTANTIATION //can put the definition here, however... (see below) template <typename T> double Point<T>::Add() { return 2.0 + 4.3; }; //... you will be required to instantiate all classes you might use from this template. template class Point<double>; template class Point<float>; //... etc. #endif