如何使用大小和值构造函数使用成员初始化列表初始化用户定义对象的向量

How to initialize a vector of user defined objects, with member initializer lists, using size and value constructor

首先,这是代码:

#include <vector>

enum class Color
{
    black = 0,
    white = 1,
};

class Pixel
{
private:
    Color m_color;
public:
    Pixel(Color color = Color::black)
        :m_color{ color }
    {
    }
};

class ScreenBuffer
{
private:
    std::vector<Pixel> m_screenbuffer;
    std::size_t m_width;
    std::size_t m_height;
public:
    ScreenBuffer(std::size_t width, std::size_t height) 
        :m_screenbuffer(width* height), m_width{ width }, m_height{ height }
    {
    }
};

int main()
{   
    ScreenBuffer main(10,10);
    return 0;
}

这是一个非常简单的屏幕缓冲区,由黑色或白色的像素组成。

当前的 ScreenBuffer 构造函数采用 2 个参数 width and height 并初始化 m_screenbuffer 向量成员,将其大小设置为 width*height 并为向量的每个元素调用 Pixel 构造函数。当前的 Pixel 构造函数,如果没有传递参数,则默认将其 m_color 成员设置为 Color::black。

如果我想初始化传递参数的向量的每个 Pixel,(比如本例 Color::white,或使用另一个接受更多参数的构造函数),如何使用成员初始化列表调用那个 Pixel 构造函数来自 ScreenBuffer class 构造函数?,如何在向量构造函数中键入 Pixel 构造函数所需的所有参数?

矢量构造函数是 m_screenbuffer(size,value),所以我尝试了 :m_screenbuffer(width* height,Color::white),它成功了!但它没有意义,因为它应该期望 Pixel 对象而不是 Color 对象。并且...如果我的 Pixel 构造函数需要更多参数怎么办,传递这些参数的正确方法是什么?

我想知道执行此操作的正确方法以及它为什么以及如何工作,以便我可以更好地理解语义逻辑。谢谢!

我在这里找到了我要找的答案:learncpp。com/cpp-tutorial/anonymous-objects 有一个叫做匿名对象的概念让我可以使用 Pixel(some_color) 作为右值并将其作为另一个构造函数的参数。