traits的一个例子,vc6可以通过,2010无法编译解决方法
traits的一个例子,vc6可以通过,2010无法编译
有vs2010的童鞋帮忙试试,我的这代码来自网络, 是一个traits的例子,2010无法通过
vc6可以通过, 郁闷死了
------解决方案--------------------
试试
typedef typename NumTraits<T>::resulttype result;
typedef typename NumTraits<T>::inputpara input;
有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;