2016-12-14 3 views
0

이 문제는 커뮤니티에서 확인하고 해결해야한다고 생각했지만 잘못된 키워드로 검색하거나 너무 애매합니다.동적 크기 구조체에 사용할 Qt C++ 데이터 컨테이너가 있습니까?

문제는 간단합니다. 동적 데이터 컨테이너 (Vector, List, Queue, 어떤 것이 든간에)를 정의해야하는 구조체를 정의하고 싶습니다.

#pragma pack(1) 

struct Example 
{ 
    int foo; 

    QVector<int> bar; 
}; 

나는이 벡터에 정수 값을 삽입 (또는 다른 Qt는/STL 컨테이너을) 할 필요가 나는 파일에 원시 데이터를 기록하기 위해 바이트 배열이 구조체의 내용을 복사 할. QVector가 가리키는 그냥 평범한 포인터이기 때문에

8 
8 

지금이 아마도 :

Example exstr; 
qDebug()<<sizeof(exstr); 
exstr.bar.push_back(12); 
exstr.bar.push_back(5); 
qDebug()<<sizeof(exstr); 

그것은 값을 표시

내가가 발생하는 것은 나는 다음과 같은 코드를 작성할 때이다 연속 데이터하지만 내가 필요한 건 동적으로 크기를 조정할 수있는 데이터 컨테이너 (또한 구조체의 크기를 조정할 것입니다) 및 serialize 할 때 바이트별로 내용을 사용할 수 있도록합니다.

미리 도움을 주셔서 감사합니다.

+0

동적 크기의 컨테이너를 출력하려는 ​​경우 직렬화 라이브러리를 사용하거나 직접 롤백해야합니다. – NathanOliver

+0

벡터의 바이트 수를 알고 싶습니까? – CroCo

+0

@CroCo 그게 내 원인을 도울 수 있지만 문제가 완전히 해결되지 않았는데, 이유는 직렬화 문제가 여전히 남아 있기 때문입니다. 그러나 일반적으로 누군가가 컨테이너에 새 요소를 삽입 할 때마다 "sizeof"가 증가하는 것을 볼 수있는 방법을 제안하면 매우 기쁩니다. –

답변

1

QDataStream는 Qt의 데이터 유형의 일부를 직렬화 할 수 있습니다 : 당신은 QVector과 올바른 궤도에있어 Serializing Qt Data Types

QDataStream stream(&file); // we will serialize the data into the file 
stream << your_qvector_obj; 
//... 
QVector<int> new_vec; 
stream >> new_vec; 
//... 
+0

답변과 코드를 보내 주셔서 감사 드리며,이 아이디어를 수업에 포함시키고 이 클래스의 메소드로 직렬화 작업. 그것은 내가 생각하는 트릭을 할 것이다. –

0

. STL 벡터 클래스도 작동합니다. 이 두 클래스 모두 인접한 메모리에 값을 저장할 수 있습니다. 첫 번째 요소의 주소를 가지고, STL과 벡터를 들어

memcpy (dest, bar.data(), bar.count() * sizeof (int)); 

: QVector를 들어

, 당신이 뭔가를해야 할 두 가지 경우 모두

memcpy (dest, &bar[0], bar.size() * sizeof (int)); 

를, "이명 령"해야 복사하는 데이터를 저장할만큼 충분히 큽니다. 여기에 예제로 복사를 사용하고 있습니다. 데이터에 대한 포인터 만 있으면 QVector :: data는 STL 벡터에 대해 첫 번째 요소의 주소를 제공합니다.