读书人

traits的一个例子vc6可以通过2010

发布时间: 2012-03-18 13:55:39 作者: rapoo

traits的一个例子,vc6可以通过,2010无法编译
有vs2010的童鞋帮忙试试,我的这代码来自网络, 是一个traits的例子,2010无法通过

vc6可以通过, 郁闷死了


C/C++ code
#include "stdafx.h"#include<iostream>using namespace std;class CIntArray{private:    int a[10];public:    CIntArray()    {        for(int i=0;i<10;i++)        {            a[i]=i+1;        }    }    int GetSum(int times);};int CIntArray::GetSum(int times){    int sum=0;    for(int i=0;i<10;i++)    {        sum+=a[i];    }    return sum*times;}class CFloatArray{private:    float f[10];public:    CFloatArray()    {        for(int i=1;i<=10;i++)        {            f[i-1]=1.0f/i;        }    }    float GetSum(float times);};float CFloatArray::GetSum(float times){    float sum=0.0f;    for(int i=0;i<10;i++)    {        sum+=f[i];    }    return sum*times;}//定义基本模板类template<class T>class NumTraits{};//模板特化  将返回类型和输入参数都定义成相同的名称,为编制模板类共同的调用接口做准备 template<>class NumTraits<CIntArray>{public:    typedef int resulttype;    typedef int inputpara;};template<>class NumTraits<CFloatArray>{public:    typedef float resulttype;    typedef float inputpara;};template<class T>class CApply{    typedef NumTraits<T>::resulttype result;    typedef NumTraits<T>::inputpara input;public:    result GetSum(T& t, input inpara)    {        return t.GetSum(inpara);    }};int main(){    CIntArray intary;    CFloatArray fltary;//    cout<<"整型数组的和3倍是:"<<intary.GetSum(3)<<endl;//    cout<<"浮点数组和3.2倍是:"<<fltary.GetSum(3.2f)<<endl;  //  CApply<CIntArray> c1; //   CApply<CFloatArray> c2;  //  cout<<"整型数组的和3倍是:"<<c1.GetSum(intary,3)<<endl;   // cout<<"浮点数组和3.2倍是:"<<c2.GetSum(fltary,3.2f)<<endl;    return 0;}


[解决办法]
试试
typedef typename NumTraits<T>::resulttype result;
typedef typename NumTraits<T>::inputpara input;

读书人网 >C++

热点推荐