- 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