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;