STL Extraction Learning
First, the Extraction template class implementation
Iterator class: A collection of common properties for templates, and other classes only need to integrate that class. This example includes only the Value_type attribute for learning.
Iterator_traits Class: Attribute extraction class.
/*********************************** author:szyu** date:2017.3.1***************************************/#ifndef _ _szyu_iterator__#define __szyu_iterator__template <typename t>class iterator_traits{public:typedef TypeName T: : Value_type Value_type;}; Template <typename t>class iterator{public:typedef T value_type;}; #endif
/****************************** ** author : szyu** date : 2017.3.1*************************************/#ifndef __szyu_head__#define __szyu_head__# include "Iterator.h" Template <typename t>class test : public iterator <t>{};template <typename t>typename iterator_traits<t>::value_typefunction ( int num1, int num2 ) { std::cout << "Traits function int. " << std::endl; return num1 + num2;} Template <typEname t>typename iterator_traits<t>::value_typefunction ( double num1, double num2 ) { std::cout << "traits function double." << std::endl; return num1 + num2;} #endif
two, test case
/************************* ** author : szyu** date : 2017.3.1***********************************/#include <iostream># include "Head.h" Voidtest1 () { int v1 = function<test<int> > (1, 2); std::cout << "v1 = " < < v1 << std::endl; double v2 = function<test <double> > ( 1.1, 2.2 ); std::cout << "v2 = "&NBSP;<< v2 << std::endl;} Intmain ( int argc, char *argv[] ) { test1 (); return 0;}
Third, test results
Traits function int.v1 = 3Traits function Double.v2 = 3.3
[C + +] STL Extraction Learning