我试图将以下两个函数组合成一个便携函数:
void NeedleUSsim::FindIdxRho()
{
searchTmp = &ninfo->rho;
double *p = std::find_if(tplRho_deg, tplRho_deg+sampleDim[2], &NeedleUSsim::GreaterThanOrEqualTo);
while(p != tplRho_deg+sampleDim[2])
{
idxRho = p - tplRho_deg;
p = std::find_if(p+1, tplRho_deg+sampleDim[2], &NeedleUSsim::GreaterThanOrEqualTo);
}
}
void NeedleUSsim::FindIdxDepth()
{
searchTmp = &ninfo->l;
double *p = std::find_if(tplL, tplL+sampleDim[1], &NeedleUSsim::LessThanOrEqualTo);
while(p != tplL+sampleDim[1])
{
idxL = p - tplL;
p = std::find_if(p+1, tplL+sampleDim[1], &NeedleUSsim::LessThanOrEqualTo);
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望函数的参数将tpl成员作为指针传递,并将大小和rho/l作为值传递.searchTmp是一个文件范围双精度指针.是否有任何简单的方法传递&NeedleUSsim :: GreaterThanOrEqualTo函数作为我正在尝试轻松编写的函数的参数?
提前感谢您的建议.
使代码更通用的最简单方法如下:
template<typename ComparisonType>
double* NeedleUSsim::FindIdx(double* containerBegin, double* containerEnd, ComparisonType comparison) {
double* p = std::find_if(containerBegin, containerEnd, comparison);
double* idx = 0;
while(p != containerEnd)
{
idx = p - containerBegin;
p = std::find_if(p+1, containerEnd, comparison);
}
return idx;
}
void NeedleUSsim::FindIdxRho()
{
searchTmp = &ninfo->rho;
double* idx = FindIdx(tplRho_deg, tplRho_deg+sampleDim[2], &NeedleUSsim::GreaterThanOrEqualTo);
if( idx != 0 )
{
idxL = idx;
}
}
void NeedleUSsim::FindIdxDepth()
{
searchTmp = &ninfo->l;
double* idx = FindIdx(tplL, tplL+sampleDim[1], &NeedleUSsim::LessThanOrEqualTo);
if( idx != 0 )
{
idxRho = idx;
}
}
Run Code Online (Sandbox Code Playgroud)