例子:
我有一个适用于向量的函数:
double interpolate2d(const vector<double> & xvals, const vector<double> & yvals, double xv, double yv, const vector<vector<double> > &fvals) {
int xhi, xlo, yhi, ylo;
double xphi, yphi;
bracketval(xvals,xv,xhi,xlo,xphi);
bracketval(yvals,yv,yhi,ylo,yphi);
return (fvals[xhi][yhi]*xphi+fvals[xlo][yhi]*(1.-xphi))*yphi + (fvals[xhi][ylo]*xphi+fvals[xlo][ylo]*(1.-xphi))*(1.-yphi);
}
但是现在我想用 boost::array 元素为前 2 个参数调用它(与括号val() 相同),如果 std::vector 和 boost::array 是自我实现的,我将能够从一个公共基类(类接口)强制执行运算符 [] 的实现,因为两者都是库提供的,有没有办法强制/指定这样的限制?
我总是可以使用普通的 c 数组,但它不是很整洁。
编辑:FWIW,这是原始的括号实现:
void bracketval(const vector<double> &vals, double v, int &hi, int &lo, double &prophi){
hi=vals.size()-1;
lo=0;
while(abs(hi-lo)>1) {
int md = (hi+lo)/2;
if(vals[md]>v) hi=md; else lo=md;
}
if(vals[hi]!=vals[lo])
prophi = (v-vals[lo])/(vals[hi]-vals[lo]);
else
prophi = 0.5;
}