2015-01-07 2 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 :: vector를 가질 수 없습니다. 대신 rapidjson :: Value 또는 그 포인터를 저장하십시오. 참조를 실제로 저장하려면 std :: reference_wrapper을 확인하십시오. C++ 표준의 섹션 23.2.4 클래스 템플릿 벡터에서

는 :

... 저장된 객체는 어사의 요구 사항을 만족해야한다.

0

수 없습니다. Value에 포인터를 저장하면 문제가 없습니다. rapidjson::Document을 분실하지 않도록주의하십시오.