最近在看STL源代码时候发现很多东西值得学习, 需要不断消化, 应用在平时项目中, 一个简单的模版萃取方法, 在STL里面应用也很广.
#include <iostream>
using namespace std;
template <class T>struct Traits{ typedef T type_name;};
template <class T> struct Traits<T *>{ typedef T type_name;};
template <class T> struct Traits<const T *>{ typedef T type_name;};
template <class T>class Iterator{public:
typedef typename Traits<T>::type_name type_name;
Iterator(type_name * pointor) : m_pointor(pointor) { }
type_name & operator* () const { return *m_pointor; }
private: type_name *m_pointor;};
template <class T>typename T::type_name testFunc(T itr){ return *itr;}
int main(int argc __attribute__((unused)), char *argv[] __attribute__((unused))){ Iterator<const int *> itr(new int(10)); cout << testFunc(itr) << endl;
Iterator<int * > itr2(new int(11)); cout << testFunc(itr2) << endl;}