将向量成员变量返回到外部类的最佳方法

nat*_*yer 4 c++ reference smart-pointers vector

我正在尝试用c ++编写一个LED条带驱动程序.现在我有一个Strip班级和一个Driver班级; 所述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;
Run Code Online (Sandbox Code Playgroud)

serialize将所有红绿蓝像素数据写入a 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();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 应该getPixelData()返回什么?它应该shared_ptr向向量返回智能指针(?)吗?或者也许是参考?我只想要地址(和长度),因为我打算这样memcpy做.

谢谢!

cdh*_*wie 7

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

std::vector<unsigned char> const & getPixelData() const;
Run Code Online (Sandbox Code Playgroud)

调用者可以决定是否需要复制.

// 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();
Run Code Online (Sandbox Code Playgroud)

getPixelDataLength()也可能成为班级的const成员.尝试使任何不更改对象const成员的成员,因为它将允许在Stripconst对象上调用它们.