- Examples

In this lesson, we'll look at a few examples of template specialization.

Example 1: template specialization #

Press + to interact
// TemplateSpecialization.cpp
#include <iostream>
class Account{
public:
explicit Account(double b): balance(b){}
double getBalance() const {
return balance;
}
private:
double balance;
};
template <typename T, int Line, int Column>
class Matrix{
std::string getName() const { return "Primary Template"; }
};
template <typename T>
class Matrix<T,3,3>{
std::string name{"Partial Specialization"};
};
template <>
class Matrix<int,3,3>{};
template<typename T>
bool isSmaller(T fir, T sec){
return fir < sec;
}
template <>
bool isSmaller<Account>(Account fir, Account sec){
return fir.getBalance() < sec.getBalance();
}
int main(){
std::cout << std::boolalpha << std::endl;
Matrix<double,3,4> primaryM;
Matrix<double,3,3> partialM;
Matrix<int,3,3> fullM;
std::cout << "isSmaller(3,4): " << isSmaller(3,4) << std::endl;
std::cout << "isSmaller(Account(100.0),Account(200.0)): "<< isSmaller(Account(100.0),Account(200.0) ) << std::endl;
std::cout << std::endl;
}

Explanation #

In the example above, we’re modifying the code that we used in the previous lesson.

  • The Primary template is called when we use values other than Matrix<data_type, 3, 4> (line 43).
  • Partial specialization is called when we instantiate
...