我们有一个用C++/Qt和Axis2C编写的基于SOAP的客户端-服务器。由于Axis2C的C语言特性,它包含了许多老式的C风格的结构(通常它们描述了自定义数据的原始数组)。如何在使用Axis2C的代码中最小化C语言的使用?支持这些自定义的C结构是一件痛苦的事情,因为它要求赋值运算符、c-tors、d-tors的准确性。基于Qt的结构不那么冗长。
发布于 2016-08-22 18:45:07
我猜您特别关注使用哪种数据类型,而不是使用老式的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;
}由于“数组”会被自动删除(BTW delete array甚至不会编译),因此不需要在此示例的末尾调用数组。
https://stackoverflow.com/questions/39075911
复制相似问题