模板元编程练习

来源:互联网 发布:淘宝国际 编辑:程序博客网 时间:2024/06/03 00:25
               
  #include <iostream>template <typename T>struct trais{    typedef T value_type;};template<typename T>struct trais<T*>{    typedef typename trais<T>::value_type value_type;};template<typename T>struct trais<T&>{    typedef typename trais<T>::value_type value_type;};template<typename T>struct add_ref{    typedef typename trais<T>::value_type& value_type;};template<typename T>struct add_const_base{    typedef const typename trais<T>::value_type value_type;};template<typename T>struct add_const{    typedef const T value_type;};template<int N>struct int_{    static const int value = N;typedef int value_type;};template <typename T,int i,int j,int k>struct vector{    typedef T value_type;    typedef int_<i> value_1;    typedef int_<j> value_2;    typedef int_<k> value_3;static const int size = 3;};template <typename T>class value{public:    typedef T value_type;    value(double _value = 0.0): m_value(_value)    {                  }    double getValue() const     {        return m_value;    }private:    double m_value;};template <typename T>T operatorAdd(const T &v1,const T &v2){return T(v1.getValue()+v2.getValue());}int main(){    add_const_base<int*>::value_type i = 1;    std::cout << int_<5>::value;    typedef vector<int,1,0,0> min;//米    typedef vector<int,2,0,0> min2;//米^2    typedef vector<int,1,-2,0> add;//m/s^2    typedef vector<int,1,1,0> speed;//m/s    typedef value<min> Min;typedef value<min2> Min2;int k = 3;add_ref<int>::value_type j = k;std::cout << j << std::endl;Min a(2.12);Min b(2.34);Min2 c;a = b;//c = a;std::cout << operatorAdd(a,b).getValue();//std::cout << operatorAdd(b,c).getValue();    return 0;}


原创粉丝点击