我有几个类的方法彼此非常相似。它们的不同之处仅在于添加了该方法的其他参数。基本方法有七个参数。
这是我目前的代码:
void Noise::calcFBM(float* arr, int xsize, int ysize,
int startOct, int endOct, double amp, double freq)
{
//Calculate Fractal Brownian Motion
}
void Noise::calcFBM(float* arr, int xsize, int ysize,
int startOct, int endOct, double amp, double freq,
std::function<float (float)> modifier)
{
//Calculate Fractal Brownian Motion
//Apply modifier (lambda function taking (value)) to each point
}
void Noise::calcFBM(float* arr, int xsize, int ysize,
int startOct, int endOct, double amp, double freq,
std::function<float (float, float, float)> modifier)
{
//Calculate Fractal Brownian Motion
//Apply modifier (lambda function taking (value, xPos, yPos)) to each point
}
我想为每一个添加一个变体添加一个结构或四个浮点数(可能是结构,以减少参数数量)。
我是否应该仅使用带有大多数参数的函数进行简化,默认我能做什么,并强制程序员设置其余的?
答案 0 :(得分:3)
是的,使用默认参数。由于modifier
参数的类型不同,您需要将其模板化为:
template <typename Func = std::function<float(float, float, float)> >
void calcFBM(float* arr, int xsize, int ysize,
int startOct, int endOct, double amp, double freq,
Func modifier = [](float x, float y, float z){return id;})
{
}
请修改默认的lambda以返回与身份修饰符函数相对应的内容,即相当于没有修饰符的第一次重载的函数。