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