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));
    }
    

      

  • 相关阅读:
    node基础和express服务器框架知识点总结
    Nacos配置服务原理
    Queue-PriorityQueue源码解析
    Mysql存储结构
    Mybatis处理动态占位符实现
    通过ThreadPoolExecutor源码分析线程池实现原理
    jdk8函数接口
    Logback源码分析
    Spring注解Component原理源码解析
    ApplicationListener原理分析
  • 原文地址:https://www.cnblogs.com/alexYuin/p/11923827.html
Copyright © 2011-2022 走看看