![](/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.