简化类的方法的多个定义

时间:2015-02-14 00:49:08

标签: c++ coding-style

我有几个类的方法彼此非常相似。它们的不同之处仅在于添加了该方法的其他参数。基本方法有七个参数。

这是我目前的代码:

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
}

我想为每一个添加一个变体添加一个结构或四个浮点数(可能是结构,以减少参数数量)。

我是否应该仅使用带有大多数参数的函数进行简化,默认我能做什么,并强制程序员设置其余的?

1 个答案:

答案 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以返回与身份修饰符函数相对应的内容,即相当于没有修饰符的第一次重载的函数。