gpt4 book ai didi

c++ - 将 vector 成员变量返回给外部类的最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:43 25 4
gpt4 key购买 nike

我正在尝试用 C++ 编写 LED 灯条驱动程序。现在我有一个 Strip类和一个Driver类(class); Strip类抽象出具有多个像素的 LED 灯条,而 Driver类聚合了 Strip数据放入单个缓冲区以通过 UDP 连接发送。

相关部分类:

class Strip {
public:
...
??? getPixelData();
int getPixelDataLength();
protected:
std::vector<unsigned char> mPixelData;

class Driver {
public:
...
void aggregateStrips();
protected:
vector<unsigned char> mBuffer;

serialize将所有红-绿-蓝像素数据写入 vector<unsigned char> .然后司机调用Strip.getPixelData()获取地址 mPixelData , 和 getPixelDataLength()计算出 memcpy() 有多少字节.

aggregateStrips()做这样的事情:

int packetLength = 0;
for(auto strip : Strips) {
memcpy(&mBuffer[packetLength], strip->getPixelData(), strip->getPixelDataLength());
packetLength += strip.getPixelDataLength();
}

我的问题是 -- getPixelData() 应该做什么返回?它应该返回一个智能指针( shared_ptr 吗?)到 vector ?或者也许是一个引用?我真的只想要地址(和长度),因为我打算 memcpy

谢谢!

最佳答案

通常您会返回一个指向 vector 的 const 引用 (std::vector<unsigned char> const &),在这种情况下,您还应该将方法设为 const,因为它不会修改对象:

std::vector<unsigned char> const & getPixelData() const;

来电者可以决定是否需要复制。

// Causes copy-initialization.
std::vector<unsigned char> copy = a_strip.getPixelData();

// Binds a new reference to the existing vector; no copy is made.
std::vector<unsigned char> const & not_a_copy = a_strip.getPixelData();

getPixelDataLength()也可能成为类(class)的常量成员。尝试使任何不更改对象的成员成为 const 成员,因为这将允许在 Strip 上调用它们const 对象。

关于c++ - 将 vector 成员变量返回给外部类的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27554656/

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