CPP/Templates/ClassTemplateExplicitInstantiation
From ProgrammingExamples
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; /* //cannot put the definition here template <typename T> double Point<T>::Add() { return 2.0 + 4.3; } */