2016-08-22 3 views
0

C++/Qt 및 Axis2C로 작성된 SOAP 기반 클라이언트 서버가 있습니다. Axis2C의 C 특성으로 인해 많은 구식 C 스타일 구조체 (대개 사용자 정의 데이터의 원시 배열을 설명)가 포함되어 있습니다. Axis2C를 사용하는 코드에서 어떻게 C 사용을 최소화 할 수 있습니까? 할당 연산자, c-tors, d-tors의 정확성이 필요하기 때문에 이러한 사용자 지정 C struct를 지원하는 것은 쉽지 않습니다. Qt 기반 구조체는 덜 장황합니다.Axis2C와 Qt 데이터 구조의 연결

답변

1

당신은 특히 구식 C (C++이 아닌) 데이터 유형 대신 사용할 데이터 유형을 찾고 있습니다. 이러한 데이터 유형은 컴파일러와 함께 제공되며 항상 사용할 수있는 C++ 표준 컨테이너 (http://www.cplusplus.com/reference/stl/)입니다. 이러한 컨테이너의 Qt 구현도 사용할 수 있습니다 (http://doc.qt.io/qt-5/containers.html).

선택할 수있는 요소는 많은 요인에 따라 다릅니다. 아래에서는 stl로 이것을 수행하는 방법을 간략하게 보여주었습니다. 그래서 당신은 c 데이터 타입을 C++/Qt 데이터 타입으로 변환하는 래퍼 (wrapper)를 작성해야한다고 생각합니다. "std :: vector"는 종종 C 스타일 배열을 대체하는 좋은 유형의 컨테이너 유형입니다.

int32_t main() 
{ 
    int arraySize = 10; 
    int* pCArray = new int [arraySize]; 

    for (int idx = 0; idx < arraySize; ++idx) 
    { 
     pCArray [idx] = idx + 100; 
    } 

    for (int idx = 0; idx < arraySize; ++idx) 
    { 
     std::cout << pCArray [idx] << std::endl; 
    } 

    std::cout << "-------------------------" << std::endl; 

    std::vector<int> array; 
    array.assign (pCArray, pCArray + arraySize); 

    delete pCArray; 

    for (int idx = 0; idx < arraySize; ++idx) 
    { 
     std::cout << array [idx] << std::endl; 
    } 

    return 0; 
} 

은 (BTW delete array도 컴파일되지 것) 자동으로 삭제됩니다 "배열"이후이 샘플의 끝에서 delete array 전화가 필요하지 않습니다.

+0

Qt 기반 구조체 Axis2C에 대한 serialization을 의미합니다. – ilya

+0

당신은 s.th를 찾고 있습니까? 이렇게 : http://stackoverflow.com/questions/2570679/serialization-with-qt? –

+0

감사합니다. 하이퍼 링크입니다. – ilya