STL 萃取学习
一,萃取模板类实现
iterator 类:模板常用属性的集合类,其他类只需要集成该类即可。本例为学习就只包括 value_type 属性。
iterator_traits 类:属性萃取类。
- /*********************************
- *
- * 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_type
- function( int num1, int num2 )
- {
- std::cout << "Traits function int." << std::endl;
- return num1 + num2;
- }
- template <typename T>
- typename iterator_traits<T>::value_type
- function( double num1, double num2 )
- {
- std::cout << "Traits function double." << std::endl;
- return num1 + num2;
- }
- #endif
二,测试用例
- /*************************
- *
- * Author : szyu
- *
- * Date : 2017.3.1
- *
- **********************************/
- #include <iostream>
- #include "head.h"
- void
- test1()
- {
- 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 = " << v2 << std::endl;
- }
- int
- main( int argc, char *argv[] )
- {
- test1();
- return 0;
- }
三,测试结果
- Traits function int.
- v1 = 3
- Traits function double.
- v2 = 3.3
来源: http://www.bubuko.com/infodetail-1978504.html