Traits技术

/*
    *Traits技术以一个统一的编程接口描述各种数据类型的基本特征.
    *
    *例如float 的最大值为 2^128, 在float.h 中被定义为FLT_MAX_EXP
    * double 的最大值为 2^1024,被定义为DBL_MAX_EXP.
    * 此外, float 和double 的最小值也不同, 分别定义为
    * FLT_EPSILON 和DBL_EPSILON
    *
    * 设想要设计一个数值分析库, 待处理的数值可表示为float, double
    * 或long double.
    * 为了避免在多个地方查询数值类型,
    *  使用traits 技术可以将不同的数据类型封装在一个类模版中
    * 程序其他模块可以使用这个类模版接口获得每个数据类型的信息
*/
#include 
   
   
    
    
using namespace std;

//此模版类为一个同统一的接口来提供数据类型的信息
template
    
    
     
     
struct fp_traits{};

template<>
    struct fp_traits
     
     
      
      
    {
       typedef float fp_type;
        enum{max_exponent = FLT_MAX_EXP};
        static inline fp_type epsilon()
        {
            return FLT_EPSILON;
        }
    };
    template<>
        struct fp_traits
      
      
       
       
        {
           typedef double fp_type;
            enum{max_exponent = DBL_MAX_EXP};
            static inline fp_type epsilon()
            {
                return DBL_EPSILON;
            }
        };

        template
       
       
         class matrix { public: typedef numT num_type; typedef fp_traits 
        
          num_type_info; inline num_type epsilon() { return num_type_info::epsilon(); } }; int main() { std::ios::sync_with_stdio(false); matrix 
         
           fm; matrix 
          
            dm; cout << "float matrix " << fm.epsilon() << endl; cout << "double matrix " << dm.epsilon() << endl; return 0; } 
           
          
         
       
      
      
     
     
    
    
   
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值