模板元编程练习
来源:互联网 发布:淘宝国际 编辑:程序博客网 时间: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;}