2015-01-07 63 views
0

我需要一个函数,它将rapidjson::Value的所有成员都作为std::vector返回。我试图避免每次需要时用IsArray()来写if。不幸的是,下面的代码不起作用。将rapidjson :: Value的元素复制到std :: vector

std::vector<const rapidjson::Value&> valueToList(const rapidjson::Value& value) 
{ 
    std::vector<const rapidjson::Value&> valueList; 

    if (value.IsArray()) 
    { 
     for (rapidjson::SizeType i = 0; i < value.Size(); i++) 
     { 
      valueList.push_back(val[i]); 
     } 
    } 
    else 
    { 
     valueList.push_back(val); 
    } 

    return valueList; 
} 

我得到的错误的push_back是模糊的。有没有简单的方法来克服这一点?谢谢。

+1

你不能有一个本地引用的向量。第二个和第三个答案[**这个问题**](http://stackoverflow.com/questions/922360/why-cant-i-make-a-vector-of-references)做一个体面的工作,解释为什么并提供替代方案(比选择的问题更多,imho)。 – WhozCraig

回答

2

std :: vector向量必须是可赋值的,所以你不能有const引用的std ::向量。相反,请尝试存储rapidjson :: Value s或指向它们的指针。如果您确实想要存储参考文献,请查看std :: reference_wrapper

从C++标准的部分23.2.4类模板矢量:

...所存储的对象应满足的可分配的要求。

0

你不能。存储指向Value的指针,你会没事的。确保不要丢失rapidjson::Document

相关问题