我对C ++很陌生,我阅读的问题越多。
我想将我的旧C代码(它列出机器上的设备)转换为设计良好的C ++代码。
正如我所读到的,C ++最基本的概念之一是容器,迭代器和算法的隔离。 也就是说,我得出的结论是我应该创建3个类:
DeviceInterface - 保存单个接口信息,例如SP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA和SP_DEVINFO_DATA
DevicesInterfaceContainer - 以某种方式以DeviceInterface类的形式保存所有设备信息的容器。
DeviceInterfaceIterator - 由算法用于迭代DevicesInterfaceContainer中的项目。
我没有设法实现它,因为我不确定如何。
迭代器应该是初始化DevicesInterfaceContainer的输出迭代器吗?或者DevicesInterfaceContainer是否应该自己初始化并获取所有设备?
当Win32 api在构造函数中失败时会发生什么?我应该抛出异常吗?如果是这样,有什么样的例外?的std ::例外?的std :: runtime_error?或者我应该定义我自己的Win32Exception,其中包含有关LastError的信息? (我需要的只是格式化消息的最后一个错误。)
类似的东西:
class DeviceInterfacesList
{
public:
DeviceInterfacesList(GUID& rtInterfaceGuid)
{
m_hDevInfo = SetupDiGetClassDevs(
&rtInterfaceGuid,
NULL,
NULL,
DIGCF_DEVICEINTERFACE
);
if (INVALID_HANDLE_VALUE == m_hDevInfo)
{
throw Win32Exception();
}
}
...
...
...
HDEVINFO m_hDevInfo;
};
我很乐意为使用STL + win32api或任何可以澄清我的问题的内容提供一些指导/好的更新示例。
提前致谢。
答案 0 :(得分:-1)
如果您想使用C ++ STL,问题可能比您想象的要容易。 首先,您需要设计一个类来保存必要的信息, 那就是“DeviceInterface”。您可以定义此类的成员和函数。
您可以使用STL容器,例如deque或list作为容器。代码就像:
deque<DeviceInterface> DIList;
对于迭代器,C ++ STL为您提供了使用它的标准方法:
for(auto it = DIList.begin(); it != DIList.end; ++it){
*it->getData();
}
我希望这可以帮到你。