将Axis2C与Qt数据结构耦合

时间:2016-08-22 09:30:42

标签: c++ qt soap axis2c

我们有一个用C ++ / Qt和Axis2C编写的基于SOAP的客户端服务器。它包含许多老式的C风格结构(通常它们描述自定义数据的原始数组),因为Axis2C的C性质。如何在使用Axis2C的代码中最小化C使用?支持这些自定义C结构是一种痛苦,因为它需要赋值运算符,c-tors,d-tors的准确性。基于Qt的结构不那么冗长。

1 个答案:

答案 0 :(得分:1)

我想您特别关注使用哪种数据类型而不是旧式的C(非C ++)数据类型。这些数据类型是C ++标准容器(http://www.cplusplus.com/reference/stl/),它们随编译器一起提供,并且始终可用。也可以使用这些容器的Qt实现(http://doc.qt.io/qt-5/containers.html)。

选择哪一个取决于很多因素。下面我展示了如何使用stl执行此操作的简化示例。所以我认为你必须编写一种将c数据类型转换为C ++ / Qt数据类型的包装器。 "的std ::矢量"是一种容器,通常是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,因为&#34; array&#34;自动删除(BTW delete array甚至不会编译)。