gpt4 book ai didi

c++ - 说明用 C++ 编写抽象层的简单示例

转载 作者:行者123 更新时间:2023-11-30 04:24:31 26 4
gpt4 key购买 nike

我只有 C++ 的基本知识。我正在尝试在 C++ 中实现硬件抽象层 (HAL)。假设我想实现这个名为 Data 的类。基于该平台,数据可以通过有线或无线方式发送。

class Data() {

public Data() {

//create random data

}

public sendData() {

// send data

}

public platform_action1() {

// do some platform specific action
}

// My HAL
int HAL() {

Data myData;

myData.platform_action1();
myData.sendData();

return 0;
}

现在,如果我有两个有线和无线平台,我该如何扩展这个类并组织我的文件,以便 HAL() 保持不变。

我也不想要动态绑定(bind),即使用关键字“virtual”。在我的例子中,平台在编译时是已知的。

//我不想这样做 :) ...

int HAL() {
Data* data = new WiredData();
data.sendData();

data = new WirelessData();

data.sendData();

}

在我的例子中,平台在编译时是已知的。

来自 C 世界,这就像填写平台特定函数指针一样简单。

以 Boost C++ API 中的“thread”类为例。该类根据平台调用 Windows 线程 API 或 Linux 线程 API 来自动生成线程。这样我的 HAL 就真正独立于平台了。

  • 谢谢克里斯

最佳答案

这更像是一个设计问题,而不是实际的 C++ 问题,但您要查找的术语是多态性。您可以使用 Data 类并创建两个继承自它的类 WiredData 和 `WirelessData,这将使您能够执行如下操作:

Data data1 = new WiredData();
Data data2 = new WirelessData();

data1.sendData();
data2.sendData();

当您在 data1 和 data2 对象上调用 sendData() 时,多态性开始发挥作用,编译器将为每个特定的子类型调用 sendData() 方法,即使它们被声明为 Data

类型

关于c++ - 说明用 C++ 编写抽象层的简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12700909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com