![](/img/trans.png)
[英]C++ Iterating over vector of class pointers and using base function
[英]Iterating over a vector containing pointers in c++
我有一個函數接受指向 rapidjson::Value 類型的指針,並將該位置的項目存儲到 kArrayType 類型的 rapidjson::Value 中。
void addBlock(rapidjson::Value* block) {
blocksArray.PushBack(*block, allocator);
}
此功能按預期工作。
為了擴展這一點,我想添加一個函數,該函數可以將這些指針的向量作為輸入。 我試過這樣做:
void addBlocks(std::vector<rapidjson::Value*> blocks) {
for (const rapidjson::Value& block : blocks) {
blocksArray.PushBack(*block, allocator);
}
}
但是,這不起作用。 它在 Visual Studio 中給了我兩個紅色波浪。
函數參數聲明中塊下方的第一個,說:
C++ 不存在合適的構造函數來轉換為...
在對PushBack()
的調用中 * 下面的第二個說:
C++ 沒有運算符匹配這些操作數操作數類型是:* const rapidjson::Value
我的猜測是我正在做一些我只是想念的非常基本的錯誤。
看來你正在做一個副本,那么為什么不使用一些標准算法呢?
void addBlocks(std::vector<rapidjson::Value*> blocks) {
std::transform(
blocks.begin(),
blocks.end(),
std::back_inserter(blocksArray),
[](rapidjson::Value* ptr){ return *ptr; });
}
您的矢量包含指針。 這些不能自動轉換為引用。 循環變量需要是指針的引用:
for (rapidjson::Value *& block : blocks)
{
blocksArray.PushBack(*block, allocator);
}
可以肯定的是,這就是“自動”在幕后所做的(如果編譯器沒有完全優化它的話)。
不確定它是否允許您保留“常量”。 當我用整數嘗試這個時它沒有。
您可以使用auto
關鍵字迭代塊向量:
for (auto block : blocks) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.