2015-01-07 73 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

相關問題