在类构造函数中调用名为lambda的优点与调用实际的私有函数相比

Arn*_*rah 2 c++ lambda class function c++11

我正在设计一个RGBA类,其中需要将四个参数传递给类的构造函数,以实例化该类.构造函数如下所示:

RGBA(int red = 0, int green = 0, int blue = 0, int alpha = 255)
{
    auto valid_color = [](int param) {return (param >= 0 && param <= 255) ? param : 0; };
    m_red = valid_color(red);
    m_green = valid_color(green);
    m_blue = valid_color(blue);
    m_alpha = valid_color(alpha);
}
Run Code Online (Sandbox Code Playgroud)

如上所示,我为每个参数使用了lambda来验证传递的参数.这让我想知道,这样一个lambda对函数有什么好处,比如这个(private在接口中声明):

int valid_color(int param)
{
    return (param >= 0 && param <= 255) ? param : 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我的选择是这样的:

  1. 继续使用lambda,让代码成为.
  2. 而不是lambda,声明一个实际的函数,如上面的那个,并使用它.
  3. 只需完全写出来就可以了.(稍微单调乏味且容易出错).

哪个选项看起来最好,为什么?

Nic*_*las 5

好吧,如果你使用lambda,你不能这样做:

RGBA(int red = 0, int green = 0, int blue = 0, int alpha = 255)
    : m_red{valid_color(red)}
    , m_green{valid_color(green)}
    , m_blue{valid_color(blue)}
    , m_alpha{valid_color(alpha)}
{}
Run Code Online (Sandbox Code Playgroud)

这使用构造函数初始化列表来初始化成员,而不是在构造函数体中执行它.

此外,您的成员函数应该是静态成员函数.或者是内部全局/命名空间范围的函数.它不使用this.

  • @ArnavBorborah:调用非静态成员函数?是的,它对构造函数调用非静态成员是有效的.但同样,由于该函数不使用`this`,因此它不是非静态的. (3认同)
  • @ArnavBorborah:因为它不使用`this`.所以没有必要使其成为非静态的. (2认同)