我是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/

10-11 23:22
查看更多