c++写一个基于模板类的模板类
c++模板类不好写。自己写了一个,好几个坑 我需要从std::valarray 派生出一个新的类class valarrayX,最后一个X是spaceX的X 需要实现的功能是在调用祖先类的min、max函数的时候,除了返回最大值最小值以外,还能得到最大值最小值在数组中的位置,也就是:
size_t pos_min;
size_t pos_max;
头文件:
#ifndef _valarrayX_H
#define _valarrayX_H
template <class T>
class valarrayX : public valarray<T>
{
public:
size_t pos_min;
size_t pos_max;
valarrayX ();
~valarrayX ();
T min();
T max();
private:
void init ();
};
void debug_valarrayX_001();
#endif
cpp主体文件
#include "valarrayX.h"
template<class T> valarrayX<T> :: valarrayX()
{
this->init();
}
template<class T> valarrayX<T> :: ~valarrayX ()
{
}
template<class T> void valarrayX<T> :: init()
{
this->pos_max=0;
this->pos_min=0;
}
template<class T> T valarrayX<T> :: min()
{
T a=valarray<T>::min();
size_t sz=this->size();
for(size_t i=0;i<sz;i++)
{
T b=(*this)[i];
if(a==b)
{
this->pos_min=i;
break;
}
}
return a;
}
template<class T> T valarrayX<T> :: max()
{
T a=valarray<T>::max();
size_t sz=this->size();
for(size_t i=0;i<sz;i++)
{
T b=(*this)[i];
if(a==b)
{
this->pos_max=i;
break;
}
}
return a;
}
void debug_valarrayX_001()
{
valarrayX<int> v;
v.resize(150);
for(int i=0;i<100;i++)
v[i]=i;
for(int i=0;i<50;i++)
{
v[i+100]=i-10;
}
int a,b;
a=v.min();
b=v.max();
a+=0;
b+=0;
__nop();
}
|