gpt4 book ai didi

c++ - 在类构造函数中调用命名 lambda 与调用实际私有(private)函数的优点

转载 作者:太空狗 更新时间:2023-10-29 23:39:12 25 4
gpt4 key购买 nike

我正在设计一个 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);
}

正如您在上面看到的,我为每个参数使用了一个 lambda 来验证传递的参数。这让我想知道,这样的 lambda 比这样的函数有什么优势(在接口(interface)中声明为 private):

int valid_color(int param)
{
return (param >= 0 && param <= 255) ? param : 0;
}

所以我的选择是:

  1. 继续使用 lambda,让代码成为现实。
  2. 而不是 lambda,声明一个实际的函数,如上面的函数,然后使用它。
  3. 只需将所有内容完整地写出来。 (有点乏味而且很容易出错)。

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

最佳答案

好吧,如果你使用 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)}
{}

这使用构造函数初始化列表来初始化成员,而不是在构造函数体内进行。

此外,您的成员函数应该是静态 成员函数。或内部全局/ namespace 范围的函数。它不使用 this

关于c++ - 在类构造函数中调用命名 lambda 与调用实际私有(private)函数的优点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com