zoukankan      html  css  js  c++  java
  • C++ trais技术 模板特化的应用

    
    // traits 的应用
    
    ///////////////////////////////////////////
    
    // traits
    template <typename T>
    class sigmaTraits
    {};
    
    // 特化
    template <>
    class sigmaTraits<char>
    {
    public:
    	typedef int returnType;
    };
    
    template <>
    class sigmaTraits<int>
    {
    public:
    	typedef int returnType;
    };
    
    template <>
    class sigmaTraits<float>
    {
    public:
    	typedef double returnType;
    };
    
    template <>
    class sigmaTraits<double>
    {
    public:
    	typedef double returnType;
    };
    
    
    ///////////////////////////////////////////
    
    
    #if 0
    // char 溢出
    template <typename T>
    inline T Sigma(const T const* start, const T const* end)
    {
    	typedef T ReturnType;
    	ReturnType s = ReturnType();
    	while (start != end)
    	{
    		s += *start++;
    	}
    
    	return s;
    }
    #endif // 1
    
    #if 1
    // 需要 trait 技术
    template <typename T>
    inline typename sigmaTraits<T>::returnType Sigma(const T const* start, const T const* end)
    {
    	typedef typename sigmaTraits<T>::returnType ReturnType;
    	ReturnType s = ReturnType();
    	while (start != end)
    	{
    		s += *start++;
    	}
    
    	return s;
    }
    #endif // 1
    
    int main()
    {
    	// 需要 trait 技术才能保证计算结果正确。避免char溢出导致结果错误。
    	char str[] = "abc";
    	size_t len = strlen(str);
    	char* pB = str;
    	char* pE = str + len;
    
    	printf("%d", Sigma(pB, pE));
    }
    

      

  • 相关阅读:
    假期学习总结3
    内部表操作
    Hive基础操作
    Hive数据仓库基本概念
    假期学习总结2
    MapReduce基础介绍
    HDFS的高可用机制和联邦机制
    tensorflow学习笔记2
    tensorflow学习笔记1
    python使用tensorflow训练数据集时报错
  • 原文地址:https://www.cnblogs.com/alexYuin/p/11923827.html
Copyright © 2011-2022 走看看