Связь Axis2C со структурами данных Qt

У нас есть клиент-сервер на основе SOAP, написанный на C ++ / Qt и Axis2C. Он содержит множество старомодных структур в стиле C (обычно они описывают необработанные массивы пользовательских данных) из-за C-природы Axis2C. Как можно минимизировать использование C в коде, который использует Axis2C? Поддерживать эти пользовательские структуры Си очень сложно, потому что это требует точности операторов присваивания, c-tors, d-tors. Структуры на основе Qt менее многословны.

1

Решение

Я предполагаю, что вы особенно ищете, какие типы данных использовать вместо устаревших типов данных C (не C ++). Эти типы данных являются стандартными контейнерами C ++ (http://www.cplusplus.com/reference/stl/), которые поставляются с вашим компилятором и всегда доступны. Также доступна реализация Qt для этих контейнеров (http://doc.qt.io/qt-5/containers.html).

Какой из них выбрать, зависит от множества факторов. Ниже я показал упрощенный пример, как это сделать с помощью stl. Поэтому я думаю, что вам придется написать своего рода оболочку, которая преобразует типы данных c в типы данных C ++ / Qt. «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;
}

Там не нужно звонить delete array в конце этого примера, так как «массив» удаляется автоматически (Кстати delete array не стал бы даже компилировать).

1

Другие решения

Других решений пока нет …