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做.
谢谢!
通常,您将返回对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对象上调用它们.
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |