我是C++的新手,我想知道我们是否可以接受任何结构作为我们的方法参数。
就是这种情况:
我有一个与硬件类(比如hw_manager
)交互的类(比如hw_device1
)。当前,hw_manager
将调用hw_device1
的方法,并且该方法的结果将通过struct参数返回(发送struct参数作为引用,并更改引用参数的值)。
在C++中,代码应如下所示:
struct sSensorStatus {
unsigned char sensor1;
unsigned char sensor2;
};
bool checkSensorStatus(struct sSensorStatus &status) {
// Change the status here
}
现在,由于硬件已更改,因此我需要创建一个新类,假设
hw_device2
具有完全不同的操作。struct sHardwareStatus {
unsigned char loader;
unsigned char transport;
unsigned char ejector;
unsigned char mouth;
};
bool checkHardwareStatus(struct sHardwareStatus &status) {
// Change the status here
}
我打算实现一个接口(interface),而不是更改
hw_manager
中的代码(这会影响该层以上的代码),而要说一个具有IHardware
方法的doAction
。这个想法是这样的:
bool doAction(int cmdID, ????) {
// switch case cmdID
// based on the cmdID, type cast the ???? into the struct
}
我应该在中输入什么? 接受任何类型的结构吗?我可以用C++做到吗?
谢谢
编辑
在硬件内部,我还将拥有另一个结构,因此我认为使用模板不适合。对不起,请稍后澄清。
最佳答案
您应该使用继承。
像这样的事情就已经存在:
struct HardwareStatusInterface{};
struct sHardwareStatus : public HardwareStatusInterface
{
unsigned char loader;
unsigned char transport;
unsigned char ejector;
unsigned char mouth;
};
struct sSensorStatus : publc HardwareStatusInterface
{
unsigned char sensor1;
unsigned char sensor2;
};
和功能:
bool doAction(int cmdID, HardwareStatusInterface &HI) {
// switch case cmdID
// based on the cmdID, type cast the ???? into the struct
}
关于c++ - C++接受参数中的任何结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15896172/